我正在使用AASM。根据条件可能有2种不同的状态例如:
aasm_event :completes do
transitions :to => condition? ? :complete : :terminate,
:from => [:active]
end
这样做的目的是因为我使用遗留代码并且有很多"完成"电话和终止状态是新的。
我已经尝试在新文件中覆盖状态机
aasm_event :completes do
transitions :to => :terminate,
:from => [:active]
end
但它没有工作,它仍然会完成状态
答案 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
。