0

关于这个主题有一些帖子,但灯还没有打开。

我正在尝试扩展 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 工作!)?

有更好的方法吗?

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

4

1 回答 1

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接听电话的最佳地点。我将它们放在关注目录中,但没有被调用。最后把它们放在我的租户模型中,一切都很好。

于 2014-02-14T20:28:01.270 回答