2011-10-24 7 views
0

私は一連のアクションを実行できるStudentモデルを持っています。最新のアクションのためにstate_machineを作成します。私は、この関数は最後のアクションのタイミングを記録することになると思ったstate_machineでの遷移タイミングを記録するRails

def after_transition(student, transition) 
    student.last_action_at = Time.now 
    end 

(:

state_machine :last_action, :initial => :get_invited do 
    event :enroll do 
     transition [:get_invited, :accept, :schedule] => :enroll 
    end 
end 

は、私は次のように最後のアクションの時間を記録するためのActiveRecord ::オブザーバーを拡張StudentObserverクラスを作成します最後の行動が何であっても)。どういうわけか、それはうまくいきません。私が1つの状態から別の状態に正常に移行したとしても、私はlast_action_atの空フィールドを持っています。

私は間違って何をしましたか?どのようにして最新の取引のタイミングを把握できますか?

ありがとうございます。

+0

移行後にレコードを保存していますか? –

+0

私はstate_machineが自動的にレコードを保存すると思います。いずれにしても、各取引後に自分のレコードの状態が更新されているのがわかります。 – AdamNYC

答えて

3

これよりはるかに簡単な解決法は、on_transitionフックを作成し、そこに時間を記録することです。

event :xyz do 
    transitions :to => :state1, :from => :state0, :on_transition => :method_name 
end 

def method_name 
    #set time here 
end 
+0

ありがとうWahaj。あなたの提案はうまくいくでしょう。すべてのイベントに対して1つのステートメントを書くことができ、繰り返さないことができればうれしいです:すべてのイベントに対するon_transition。 – AdamNYC

関連する問題