关于这个主题有一些帖子,但灯还没有打开。
我正在尝试扩展 rails gem/engine Plutus以使用acts_as_tenant
Plutus 为应用程序提供复式记帐系统。限制之一是该设计仅允许一个客户或一套书籍。我想要做的是使用acts_as_tenant 添加多租户,尽可能少地修改Plutus 引擎。目标不是用不同的分叉显着改变 Plutus,而是向 Plutus 添加一些可选方法或属性,这些方法或属性仅在您想要多个帐户时使用。
我让它处于半工作状态,但需要帮助来寻找放置东西的位置并帮助清理不工作的地方。精简的 Plutus 模型是:
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
然后账户上的 sti 类:资产、权益、费用、负债、收入和金额上的 sti 类:DebitAmount、CreditAmount。这有点超出了我的 Rails 知识范围,但这可能是我见过的最紧凑的复式记账方案之一(我不是会计师,但过去我不得不在应用程序上添加会计功能)。
半工作意味着我在 Plutus 中修改的唯一内容是tenant_id
在三个模型中添加 a 并让acts_as_tenant 扩展三个模型中的两个。从主应用程序的控制台中,我发现:
Plutus::Account.acts_as_tenant(:tenant)
Plutus::Amount.acts_as_tenant(:tenant)
Plutus::Transaction.acts_as_tenant(:tenant)
适用于 Account 和 Transaction,但 Amount with 出现错误uninitialized constant Transaction
,我不知道为什么。有任何想法吗?
我已经阅读了有关引擎的 Rails 指南并使用装饰器或关注点进行扩展,但还没有弄清楚如何acts_as_tenant(:tenant)
使用这些方法发送到模型。我应该将这三行代码放在主应用程序中的什么位置(假设我知道如何让 Amount 工作!)?
有更好的方法吗?
我仍然有一些必须扩展或修改的类方法,但是在我克服第一个障碍之前尝试这样做是没有用的。