如何告诉AASM忽略该事件的事件不适用于当前状态(未定义转换)?

时间:2011-11-16 01:12:36

标签: ruby-on-rails aasm

我正在使用AASM。我有一个过渡定义的事件。如果事件被引发并且模型位于:from state,则它可以工作。但是,如果模型处于任何其他状态,则会抛出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 state时,aasm会抛出InValidTransition。在这些状态下,如何告诉aasm忽略该事件?

3 个答案:

答案 0 :(得分:3)

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

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

这应该做你想要的。

答案 1 :(得分: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

答案 2 :(得分:0)

如果您想根据当前状态只获取AASM对象的允许事件:

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

您也可以通过

获取名称

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