如何在Rails应用程序中使用state_machine gem触发事件

时间:2014-10-16 22:12:25

标签: ruby-on-rails state-machine

我希望将state_machine gem用于项目,但我仍然坚持如何在Rails 3.1应用程序中调用事件。

我了解如何设置state_machine,如下所示:

class Vehicle < ActiveRecord::Base
  state_machine :initial => :parked do
    event :ignite do
      transition :parked => :idling
    end
  end
end

我理解,这给了我以下选项:

vehicle = Vehicle.create    # => #<Vehicle id=1 state="parked">
vehicle.ignite              # => true
vehicle.state  

但是我如何在Rails应用程序中更改Vehicle的状态?从控制器调用vehicle.ignite吗?还是在before_save方法?我是否在页面上有一个按钮,其中有一个AJAX调用特殊路径来点燃引擎?

应用程序如何知道调用ignite方法?我是否必须传递某种类型的标志来检查我是否应该在POST中点燃(即attr_accessor:mark_as_ignited或基于其知道的其他变量来调用ignite方法?

谢谢,

1 个答案:

答案 0 :(得分:0)

通过使用!

调用该事件名称,您可以从一种状态转换到另一种状态
vehicle.ignite!

至于你怎么知道何时调用它,你可能会在控制器中设置一条路径。这可能就像以下一样简单。

def ignite
  @vehicle = Vehicle.find params[:id]
  @vehicle.ignite!
  render :show
end

您必须在路线文件中设置必要的成员端点,并在您认为必要的地方放置相应的链接,但就是这样。