首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >扩展gem/engine模型以包括主应用程序中的acts_as_tenant

扩展gem/engine模型以包括主应用程序中的acts_as_tenant
EN

Stack Overflow用户
提问于 2014-02-12 13:40:35
回答 1查看 583关注 0票数 0

关于这个问题有几个帖子,但灯还没有亮起来。

我正在尝试扩展rails gem/engine 冥王星以使用租客

Plutus为应用程序提供了复式记帐系统。其中一个限制是设计只允许一个客户或一套书籍。我要做的是添加多租户使用acts_as_tenant尽可能少的修改冥王星引擎。目标不是用不同的分叉显着地更改Plutus,而是向Plutus添加一些仅在需要多个帐户时才使用的可选方法或属性。

我有半工作,但需要帮助找出在哪里放置的东西和帮助清理不起作用的东西。浓缩冥王星模型如下:

代码语言:javascript
复制
class Account < ActiveRecord::Base
    has_many :credit_amounts, :extend => AmountsExtension
    has_many :debit_amounts, :extend => AmountsExtension
    has_many :credit_transactions, :through => :credit_amounts, :source => :transaction
    has_many :debit_transactions, :through => :debit_amounts, :source => :transaction
end

class Amount < ActiveRecord::Base
  belongs_to :transaction
  belongs_to :account
end

class Transaction < ActiveRecord::Base
   belongs_to :commercial_document, :polymorphic => true
   has_many :credit_amounts, :extend => AmountsExtension
   has_many :debit_amounts, :extend => AmountsExtension
   has_many :credit_accounts, :through => :credit_amounts, :source => :account
   has_many :debit_accounts, :through => :debit_amounts, :source => :account
end

然后按帐户分类:资产、股本、费用、负债、收入和金额分类: DebitAmount、CreditAmount。这一点超出了我的rails知识范围,但这可能是我所见过的最紧凑的双入模式(我不是会计,但我过去不得不在应用程序中添加会计功能)。

半工作意味着,我在Plutus中所做的唯一修改就是在三种模型中添加一个tenant_id,并让acts_as_tenant扩展三种模型中的两种。从主应用程序的控制台中,我发现:

代码语言:javascript
复制
Plutus::Account.acts_as_tenant(:tenant)
Plutus::Amount.acts_as_tenant(:tenant)
Plutus::Transaction.acts_as_tenant(:tenant)

适用于帐户和交易,但是在uninitialized constant Transaction的金额上有错误,我不知道为什么。有什么想法吗?

我已经阅读了关于引擎的rails指南,并使用装饰器或关注点进行扩展,但还没有弄清楚如何使用这些方法将acts_as_tenant(:tenant)发送到模型。我将把这三行代码放在主应用程序中的哪个位置(前提是我知道如何使用!)?

有没有更好的方法?

我仍然有一些类方法需要扩展或修改,但是在克服第一个障碍之前,尝试这些方法是没有用的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-14 20:28:01

问题是Plutus是一个名字间隔的引擎,虽然它在引擎中工作得很好,但是从引擎外部调用它(主应用程序)可能会引发冲突。

为了修复它,在关联中添加了一个class_name选项。

代码语言:javascript
复制
module Plutus
    class Amount < ActiveRecord::Base
      belongs_to :transaction, class_name:"Plutus::Transaction"
      belongs_to :account, class_name:"Plutus::Account"

      validates_presence_of :type, :amount, :transaction, :account
    end
end

仍然没有找到最好的地方来坚持ActsAsTenant电话。我把他们卡在关注点目录里,他们没有被打电话。最后把它们放到我的房客模型里,一切都很好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21729586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档