2

我正在使用 AASM。我有一个用转换定义的事件。如果引发事件并且模型处于 :from 状态,则它可以工作。但是,如果模型处于任何其他状态,它会引发 InValidTransition 异常。

aasm_state :first
aasm_sate  :second
aasm_state :third

aasm_event :myevent do
  transitions :from => :second, :to => :third
end

现在,如果我执行 mymodel.myevent!当 mymodel 处于 :first 或 :third 状态时,aasm 会抛出 InValidTransition。在这些状态下,我如何告诉 aasm 忽略该事件?

4

3 回答 3

3
aasm :column => :state, :whiny_transitions => false do
 state :first
 state  :second
 state :third

 event :myevent do
   transitions :from => :second, :to => :third
 end
end

这应该做你想要的。

于 2012-08-09T10:55:57.233 回答
0

状态机的重点是您要限制可以转换到和转换的状态。如果您想要上述功能,为什么要使用状态机的约束?你可以这样做

def myevent
  self.update_attribute(:state, 'third') if self.state == 'second'
end

或者,如果您想继续使用状态机,也可以这样做

aasm_event :myevent do 
    transitions :to => :second, :from => [:second]
    transitions :to => :second, :from => [:first]
end
于 2012-04-20T18:18:57.547 回答
0

如果您只想根据当前状态获取 AASM 对象的允许事件,您可以执行以下操作:

#assuming your aasm object is saved to 'dummy' variable dummy.aasm.events(permitted: true)

你也可以通过

dummy.aasm.events(permitted: true).map(&:name)

于 2016-12-12T20:15:04.920 回答