2014-09-18 9 views
1

Так что у меня в нескольких моделях проектов, где многие из них имеют активировать и деактивировать функцию, которую я управлять с помощью AASMКак избежать дублирования кода с помощью AASM?

aasm column: 'status' do 
    state :active, :initial => true 
    state :inactive 

    event :deactivate do 
    transitions :from => :active, :to => :inactive 
    end 

    event :activate do 
    transitions :from => :inactive, :to => :active 
    end 
end 

Я хотел бы избежать дублирования этого кода, он находится в 4-х различных моделей и я, вероятно, не добавлю к ним больше состояний.

Заранее спасибо

ответ

3

вы можете создать модуль с этой части и поместить его в models/concerns/ или lib/ папку (или где-то еще, просто убедитесь, что вы загрузили его):

module ActivateDeactivateStatuses 
    extend ActiveSupport::Concern 

    included do 
     aasm column: 'status' do 
     state :active, :initial => true 
     state :inactive 

     event :deactivate do 
      transitions :from => :active, :to => :inactive 
     end 

     event :activate do 
      transitions :from => :inactive, :to => :active 
     end 
     end 
    end 
    end 

и в ваши модели:

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