Есть несколько сообщений на эту тему, но свет еще не включен.Расширение моделей драгоценных камней/двигателей для включения act_as_tenant из основного приложения
Я пытаюсь расширить рельсы гем/двигатель Plutus использовать acts_as_tenant
Plutus обеспечивает двойную систему учета входа для приложения. Одно из ограничений заключается в том, что дизайн позволяет использовать только одного клиента или один комплект книг. То, что я пытаюсь сделать, - это добавить многоэтажку, используя act_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
Затем STI классы по Счету: Asset, собственный капитал, расходы, обязательства, доходы и STI классы по Количество: DebitAmount, CreditAmount. Это немного превышает мои знания в области рельсов, но это могут быть самые компактные схемы двойной записи, которые я когда-либо видел (я не бухгалтер, но мне приходилось добавлять функции учета в приложениях в прошлом).
Полуобработанное означает, что единственное, что я изменил в Плутосе, добавляет tenant_id
к трем моделям и получает act_as_tenant для продления двух из трех моделей. С консоли на главном приложении я обнаружил, что:
Plutus::Account.acts_as_tenant(:tenant)
Plutus::Amount.acts_as_tenant(:tenant)
Plutus::Transaction.acts_as_tenant(:tenant)
работы для счета и операции, но ошибки в размере с uninitialized constant Transaction
, и я не знаю, почему. Есть идеи?
Я прочитал руководство по направляющим на двигателях и расширился с помощью декораторов или проблем, но не понял, как отправить acts_as_tenant(:tenant)
в модель с использованием этих подходов. Где бы я поместил эти три строки кода в основное приложение (чтобы выяснить, как заставить Amount работать!)?
Есть ли лучший подход?
У меня все еще есть несколько методов класса, которые мне придется расширять или изменять, но не пытайтесь использовать это, пока я не преодолею это первое препятствие.