1
我正在寻找一个项目使用state_machine gem,但我被困在如何在Rails 3.1应用程序中调用事件。如何在Rails应用程序中使用state_machine gem触发事件
我知道如何建立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.ignite是否被控制器调用?或者它在before_save方法中?我是否在页面上有一个按钮,并通过AJAX调用特殊路径来点燃引擎?
应用程序如何知道如何调用点火方法?我一定要通过某种类型的标志来检查我是否应该在后点燃(即attr_accessor:mark_as_ignited或基于其他变量它知道要调用的点火方法
谢谢
感谢您的回复!那就是我的想法。你会建议为每个事件分别设置一条路由,还是只有一条路由叫做“update_status”,然后传递一个参数来触发哪个事件的调用? – 2014-10-17 01:15:18
我会倾向于遵循SRP(单一责任原则),而不是将它们全部整合在一起。 – Robert 2014-10-17 15:21:34
非常感谢您的帮助! – 2014-10-17 15:50:57