Автоматический переход состояния Rails AASM

Я работаю над приложением Rails, которое использует драгоценный камень AASM для перехода определенного объекта в разные состояния.

Необходимо иметь начальное состояние «предварительное одобрение», но только в том случае, если для атрибута «принято» установлено значение false. Есть ли способ сделать автоматические переходы с помощью драгоценного камня AASM?

Вот штаты:

  aasm column: :status do
    state :pre_approval, initial: true
    state :pending
    state :opened
    state :closed

    event :approved do
      transitions from: :pre_approval, to: :pending, guard: :approved_changed?
    end

    event :received, after: Proc.new { set_received_date } do
      transitions from: :pending, to: :opened
    end

    event :complete, after: Proc.new { set_completion_date } do
      transitions from: :opened, to: :closed
    end
  end

person dennismonsewicz    schedule 17.07.2014    source источник
comment
Итак, вы имеете в виду, что всякий раз, когда атрибут accepted изменяется на true, вы хотите, чтобы столбец status автоматически устанавливался на pending с помощью AASM (вроде в фоновом режиме)?   -  person alto    schedule 13.08.2014


Ответы (1)


Здесь вы можете увидеть список всех возможных обратных вызовов вместе с порядком их вызова:

begin
  event           before
  event           guards
  transition      guards
  old_state       before_exit
  old_state       exit
  transition      after
  new_state       before_enter
  new_state       enter
  ...update state...
  event         success             # if persist successful
  old_state       after_exit
  new_state       after_enter
  event           after
rescue
  event           error
end

Есть три обратных вызова для нового состояния: before_enter, enter, after_enter, но без охранников. Поэтому я думаю, что если вы хотите установить начальное состояние, когда некоторые условия истинны, лучший способ — использовать обратный вызов before_create рельсов.

Кстати, я не думаю, что aasm должен добавлять защиту для состояния. Потому что состояние - это определенный статус, а не действие. Мы просто можем добавить обратный вызов для входа или выхода из этого состояния.

Есть ли способ сделать автоматические переходы с помощью драгоценного камня AASM?

Нет, но вы можете вызвать событие в обратных вызовах aasm или обратных вызовах rails.

person rubyu2    schedule 18.08.2015