Как избежать дублирования кода с использованием 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 разных моделях, и я, вероятно, не буду добавлять к ним больше состояний.
заранее спасибо
1 ответ
Решение
Вы можете создать модуль с этой частью и поместить его в 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