Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 记录机器轨道状态的转换时间_Ruby On Rails_Ruby_State Machine - Fatal编程技术网

Ruby on rails 记录机器轨道状态的转换时间

Ruby on rails 记录机器轨道状态的转换时间,ruby-on-rails,ruby,state-machine,Ruby On Rails,Ruby,State Machine,我有一个学生模型,他可以执行一系列动作。我为最新的动作创建一个状态机 state_machine :last_action, :initial => :get_invited do event :enroll do transition [:get_invited, :accept, :schedule] => :enroll end end 我创建了一个StudentObserver类,该类扩展ActiveRecord::Observer以记录最后一

我有一个学生模型,他可以执行一系列动作。我为最新的动作创建一个状态机

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
我想这个函数会记录最后一个动作的时间(不管最后一个动作是什么)。不知何故,它不起作用,即使我成功地从一个州过渡到另一个州,我也得到了最后一个行动的空字段

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


谢谢。

一个更简单的解决方案是创建一个on_转换挂钩,并在那里记录时间

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

def method_name
  #set time here
end

一个更简单的解决方案是创建一个on_转换钩子,并在那里记录时间

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

def method_name
  #set time here
end

转换后是否保存记录?我认为状态机会自动保存记录。在任何情况下,我都可以看到我的记录的状态在每次交易后都会更新。您是否在转换后保存记录?我认为状态机会自动保存记录。在任何情况下,我都可以在每次交易后看到我的记录状态更新。谢谢Wahaj。你的建议行得通。如果我能为所有事件写一句话,而不是重复,那就太好了:关于所有事件的过渡。谢谢Wahaj。你的建议行得通。如果我能为所有事件编写一条语句,而不是重复:on_transition to all events,那就太好了。