是否可以使用其名称安全地在AASM中执行转换?
我现在在AASM做的事情:
if order.aasm.events.include? params[:event]
order.send(params[:event])
order.save
end
我可以在state_machine
order.state_event = params[:event]
order.save
答案 0 :(得分:0)
你可以加入aasm do
阻止吗?我之前没有使用state_machine
,但这并不是一个典型的使用aasm
的方式。你不应该发送过渡;相反,您只需调用该事件,您的状态转换将根据您创建的事件/转换规则自动发生。
这是一个小例子。
aasm do
state :draft
state :review
state :accepted
state :rejected
event :submit do
transitions :from => :draft, :to => :review
transitions :from => :review, :to => :accepted
end
event :reject do
transitions :form => :review, :to => :rejected
end
end
现在,在上面的示例中,如果对象处于草稿状态,并且您调用object.submit
它将从draft to review
过渡,如果您处于审核状态,object.submit
将从review to accepted
。
另请注意,不是调用事件然后调用save,而是可以将!
附加到事件名称,并在转换完成后自动进行保存。
所以而不是
object.submit
object.save
您只需致电
即可object.submit!