1

是否可以使用其名称在 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
4

1 回答 1

1

你能包括你的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! 
于 2014-10-17T14:19:05.843 回答