この件に関する投稿はいくつかありますが、まだ点灯していません。
私は、Rails gem/engine Plutusを拡張して、 acts_as_tenantを使用しようとしています。
Plutus は、アプリケーション用の複式簿記システムを提供します。制限の 1 つは、設計上、1 人の顧客または 1 セットの本しか許可されないことです。私がやろうとしているのは、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
次に、Account の sti クラス: Asset、Equity、Expense、Liability、Revenue、および Amount の sti クラス: DebitAmount、CreditAmount。これは私のレールの知識を少し超えていますが、これは私が今まで見た中で最もコンパクトな複式簿記スキームの可能性があります (私は会計士ではありませんが、過去にアプリに会計機能を追加する必要がありました)。
セミワーキングとは、私が Plutus で変更した唯一のことは、3 つのモデルに を追加し、tenant_id
acts_as_tenant を取得して 3 つのモデルのうちの 2 つを拡張することです。メインアプリケーションのコンソールから、次のことがわかりました。
Plutus::Account.acts_as_tenant(:tenant)
Plutus::Amount.acts_as_tenant(:tenant)
Plutus::Transaction.acts_as_tenant(:tenant)
Account と Transaction では機能しますが、 Amount でエラーが発生しuninitialized constant Transaction
、理由がわかりません。何か案は?
acts_as_tenant(:tenant)
エンジンに関するレールガイドを読み、デコレーターまたは懸念事項で拡張しましたが、これらのアプローチを使用してモデルに送信する方法がわかりませんでした。この 3 行のコードをメイン アプリケーションのどこに配置すればよいでしょうか (Amount を機能させる方法を理解していれば!)?
より良いアプローチはありますか?
拡張または変更しなければならないクラス メソッドがまだいくつかありますが、この最初のハードルを乗り越えるまでそれを試しても意味がありません。