Как избежать дублирования кода с использованием 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
Другие вопросы по тегам