记录state_machine Rails中的转换时间

时间:2011-10-24 02:15:12

标签: ruby-on-rails ruby state-machine

我有一个可以执行一系列操作的学生模型。我为最新动作创建了一个state_machine。

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

我创建了一个StudentObserver类,它扩展了ActiveRecord :: Observer以记录上一次操作的时间,如下所示:

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

我认为这个函数会记录最后一个动作的时间(无论最后一个动作是什么)。不知怎的,它不起作用,即使我成功地从一个状态转移到另一个状态,我也得到了last_action_at的空字段。

我做错了什么?如何捕获最新交易的时间?

谢谢。

1 个答案:

答案 0 :(得分:3)

一个更简单的解决方案是创建一个on_transition挂钩并记录那里的时间。

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

def method_name
  #set time here
end