1

私は、AASMgem を使用して特定のオブジェクトをさまざまな状態に遷移させる Rails アプリに取り組んでいます。

「承認済み」の属性が false に設定されている場合のみ、「事前承認」の初期状態が必要です。AASMgemを使用して自動トランジションを行う方法はありますか?

状態は次のとおりです。

  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
4

1 に答える 1

0

ここでは、可能なすべてのコールバックのリストと、それらの呼び出し順序を確認できます。

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の3つのコールバックがありますが、ガードはありません。したがって、いくつかの条件が真のときに初期状態を設定したい場合は、Railsのbefore_createコールバックを使用するのが最善の方法だと思います.

ところで、aasm は状態にガードを追加する必要はないと思います。状態はアクションではなく特定の状態であるためです。コールバックを追加するだけで、この状態に入る、または出ることができます。

AASM gem を使用して自動トランジションを行う方法はありますか?

いいえ。ただし、aasm コールバックまたは rails コールバックでイベントを呼び出すことはできます。

于 2015-08-18T15:16:31.907 に答える