关于这个问题有几个帖子,但灯还没有亮起来。
我正在尝试扩展rails gem/engine 冥王星以使用租客
Plutus为应用程序提供了复式记帐系统。其中一个限制是设计只允许一个客户或一套书籍。我要做的是添加多租户使用acts_as_tenant尽可能少的修改冥王星引擎。目标不是用不同的分叉显着地更改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然后按帐户分类:资产、股本、费用、负债、收入和金额分类: DebitAmount、CreditAmount。这一点超出了我的rails知识范围,但这可能是我所见过的最紧凑的双入模式(我不是会计,但我过去不得不在应用程序中添加会计功能)。
半工作意味着,我在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)发送到模型。我将把这三行代码放在主应用程序中的哪个位置(前提是我知道如何使用!)?
有没有更好的方法?
我仍然有一些类方法需要扩展或修改,但是在克服第一个障碍之前,尝试这些方法是没有用的。
发布于 2014-02-14 20:28:01
问题是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电话。我把他们卡在关注点目录里,他们没有被打电话。最后把它们放到我的房客模型里,一切都很好。
https://stackoverflow.com/questions/21729586
复制相似问题