その名前を使用して 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
その名前を使用して 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
あなたの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!