2014-10-16 56 views
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或基于其他变量它知道要调用的点火方法

谢谢

回答

0

你过渡从一个状态到另一个状态通过调用与该事件名字!

vehicle.ignite! 

至于你怎么会知道何时调用它,你会设置控制器可能的路线。这可能是一些简单,如下。

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

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

+0

感谢您的回复!那就是我的想法。你会建议为每个事件分别设置一条路由,还是只有一条路由叫做“update_status”,然后传递一个参数来触发哪个事件的调用? – 2014-10-17 01:15:18

+0

我会倾向于遵循SRP(单一责任原则),而不是将它们全部整合在一起。 – Robert 2014-10-17 15:21:34

+1

非常感谢您的帮助! – 2014-10-17 15:50:57

相关问题