我希望将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方法?
谢谢,
答案 0 :(得分:0)
通过使用!
调用该事件名称,您可以从一种状态转换到另一种状态vehicle.ignite!
至于你怎么知道何时调用它,你可能会在控制器中设置一条路径。这可能就像以下一样简单。
def ignite
@vehicle = Vehicle.find params[:id]
@vehicle.ignite!
render :show
end
您必须在路线文件中设置必要的成员端点,并在您认为必要的地方放置相应的链接,但就是这样。