关于此主题有一些帖子,但灯还没亮。
我正在尝试扩展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类:DebitAmount,CreditAmount。这有点超出了我的轨道知识,但这可能是我见过的最紧凑的双入口计划(我不是会计师,但我过去必须在应用程序上添加会计功能)。
半工作意味着我在Plutus中修改的唯一内容是在三个模型中添加tenant_id
并获取acts_as_tenant以扩展三个模型中的两个。从主应用程序的控制台我发现:
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)
发送到模型。我会在主应用程序中将这三行代码放在哪里(假设我弄清楚如何让Amount工作!)
有更好的方法吗?
我仍然有一些类方法需要扩展或修改,但在我克服第一道障碍之前没有尝试过。
答案 0 :(得分:0)
问题是Plutus是一个名称间隔的引擎,虽然它在引擎内工作正常,但从引擎外部(主应用程序)调用它可能会引发冲突。
要修复它,会在关联中添加class_name选项。
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
电话的最佳位置。我把它们放在Concerns目录中,但没有被调用。最后将它们放入我的租户模型中,一切都很好。