6

我正在使用 AASM。是否可能有 2 种不同的状态取决于条件例如:

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

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

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

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

但它没有用,它仍然进入完成状态

4

1 回答 1

16

为此,您可以为每个转换设置一个守卫,它将在实际运行转换之前运行:

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

def condition?
  some_contition
end

这将转换为:completeif:condition?为 true,否则将转换为:terminate.

于 2014-10-10T00:29:32.517 回答