2011-10-24 3 views
0

나는 일련의 작업을 수행 할 수있는 학생 모델이 있습니다. 최신 액션을위한 state_machine을 만듭니다. 나는이 기능은 마지막 동작의 타이밍을 기록합니다 생각state_machine에서 전환의 기록 타이밍 레일

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 

나는 다음과 같은 마지막 작업의 시간을 기록 액티브 :: 옵저버를 확장하는 StudentObserver 클래스를 생성 마지막 행동이 무엇이든간에). 어떻게 든 그것은 작동하지 않으며, 내가 하나에서 다른 상태로 성공적으로 통과하더라도 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. 귀하의 제안이 효과가 있습니다. 모든 이벤트에 대해 하나의 명령문을 작성할 수 있고 반복하지 않는 것이 좋을 것입니다 : on_transition to all events. – AdamNYC