1

その名前を使用して AASM でトランジションを安全に実行することは可能ですか?

AASM で現在行っていること:

if order.aasm.events.include? params[:event]
  order.send(params[:event]) 
  order.save
end

でできたことstate_machine

order.state_event = params[:event]
order.save
4

1 に答える 1

1

あなたのaasm doブロックを含めることはできますか?以前は使用したことがありstate_machineませんが、これは一般的な使用方法ではありませんaasm。遷移を送信する必要はありません。むしろ、イベントを呼び出すだけで、作成したイベント/遷移ルール​​に基づいて状態の遷移が自動的に発生します。

ここに小さな例があります。

aasm do
  state :draft
  state :review
  state :accepted
  state :rejected

  event :submit do
    transitions :from => :draft, :to => :review
    transitions :from => :review, :to => :accepted
  end

  event :reject do
    transitions :form => :review, :to => :rejected
  end
end

上記の例では、オブジェクトが下書き状態にあり、呼び出すobject.submitと から移行draft to reviewし、レビュー状態にある場合はobject.submitから移行しreview to acceptedます。

また、イベントを呼び出してから save を呼び出す代わりに!、イベント名に を追加すると、遷移の完了後に保存が自動的に行われることに注意してください。

だから代わりに

object.submit
object.save

あなたは単に呼び出すことができます

object.submit! 
于 2014-10-17T14:19:05.843 に答える