2014-02-12 2 views
0

Есть несколько сообщений на эту тему, но свет еще не включен.Расширение моделей драгоценных камней/двигателей для включения 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 работать!)?

Есть ли лучший подход?

У меня все еще есть несколько методов класса, которые мне придется расширять или изменять, но не пытайтесь использовать это, пока я не преодолею это первое препятствие.

ответ

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 звонки. Я застрял в каталоге «Концерны», и их не вызвали. Закончилось сдавать их в мою модель Арендатора, и все в порядке.

 Смежные вопросы

  • Нет связанных вопросов^_^