2012-01-02 9 views
0

私はstate_machine(https://github.com/pluginaweek/state_machine/)を使用しているレールでアプリケーションを開発しています。if-else条件がレール状態マシンにチェックインする

ここでは、条件 の状態が別の状態から変更されたことに基づいて、ある状態の状態を確認したかったのです。 (すなわちSTATE1、STATE2と STATE3を検討している状態であれば(A> B){STATE1 => STATE2}他{STATE1 => STATE3})

は、私はこれがで達成する方法を知りたいと思った
、ステートマシン。 親切にお手伝いします

答えて

2

state_machineでは、基礎となるオブジェクトの状態を変更するイベントを定義します。また、状態属性を必要な状態に設定することもできます。あなたがしたいあなたの場合

a.state = a > b ? "state2" : "state3" 
a.save! 

あなたはまたして状態を確認することができます:あなたは何をすべき

a.state1? 

はSTATE1からSTATE2への移行を説明するイベントを定義していますまたは状態3。例えば:次に

state_machines :state, initial: :state1 do 
    ... 

    event :go_to_state2 do 
    transition state1: :state2 
    end 

    event :go_to_state3 do 
    transition state1: :state3 
    end 

    ... 
end 

、あなたはこのような状態を移行:イベントを使用して

if a > b 
    a.go_to_state2! 
else 
    a.go_to_state3! 
end 

状態を操作する多くのきれいな方法です。これはすべてでカバーされていますReadme on the plugin's github page

+0

ありがとうアンドリュー、私はアイデアを持っている各パスの別のイベントを定義すると言うことを意味します。 –

関連する問題