是否可以使用其名称在 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
是否可以使用其名称在 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
你能包括你的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
。
另请注意,您可以在事件名称后附加一个,而不是调用事件然后调用保存,!
并且转换完成后将自动进行保存。
所以而不是
object.submit
object.save
你可以简单地打电话
object.submit!