AASM:根据条件转换为2种不同的状态

时间:2014-10-10 00:13:03

标签: ruby-on-rails aasm

我正在使用AASM。根据条件可能有2种不同的状态例如:

aasm_event :completes do
  transitions :to => condition? ? :complete : :terminate, 
              :from => [:active]
end

这样做的目的是因为我使用遗留代码并且有很多"完成"电话和终止状态是新的。

我已经尝试在新文件中覆盖状态机

aasm_event :completes do
  transitions :to => :terminate, 
              :from => [:active]
end

但它没有工作,它仍然会完成状态

1 个答案:

答案 0 :(得分:13)

使用guard

aasm_event :completes do
  transitions :from => [:active], :to => :complete, :guard => condition?
  transitions :from => [:active], :to => :terminate 
end

def condition?
  some_contition
end

如果:complete为真,则会转换为condition?,否则会转换为:terminate