2017-02-22 12 views
0

私は、AASMと呼ばれる状態マシンの宝石をレールに使用します。Rails AASM;特定の遷移が発生した場合の対処方法

2つのタイプのトランジションを持つイベントがあります。状態の

三三種類が

state pending 
state past_due 
state paid 

pendingpaid past_dueに変更することができますがpast_dueが行く場合にのみ、私はいくつかのアクションを行うのが大好きですので、ここでpaid

event :pay do 
     transitions from: [:pending, :past_due], to: :paid 
    end 

に変更することができますpaid

これを行うには

答えて

1

1つの方法は、2つの別々のステートメントで遷移を定義することです:

event :pay do 
    transitions :from => :pending, :to => :paid 
    transitions :from => :past_due, :to => :paid, :after => do_your_custom_action 
end 

は、コールバックin the docsについての詳細を参照してください。

0

コールバックをトランジションとイベントの両方に付加できます。

両方のトランジションでイベントが同じであるため、past_dueからpaidまでの特定のトランジションにコールバックを添付する必要があります。

単一のトランジションで両方のフローをカバーするので、まず、このフローの別のトランジションを行い、コールバックをそれに接続します。個人的に、

transitions :from => :past_due, :to => :paid, :after => your_required_action 
0

として、私はafterコールバック

event :pay do 
    after do 
    # do_something 
    end 
    transitions from: [:pending, :past_due], to: :paid 
end 

私はevent :payが終わった後do_somethingが実行されることを保証する。この方法にブロックを渡します。

もう1つの方法は、トランジションが完了した後にコールバックが実行されるtransitionsにコールバックを添付することです。

ドキュメントをご覧になり、read about callbacksとその必要なものをカバーするための電話の注文

関連する問題