Ruby on rails 如果事件不适用于当前状态(未定义转换),如何告知AASM对事件进行IGNORE?

Ruby on rails 如果事件不适用于当前状态(未定义转换),如何告知AASM对事件进行IGNORE?,ruby-on-rails,aasm,Ruby On Rails,Aasm,我正在使用原子吸收光谱法。我有一个用转换定义的事件。如果引发了事件且模型处于:from状态,则该选项有效。但是,如果模型处于任何其他状态,它将抛出InValidTransition异常 aasm_state :first aasm_sate :second aasm_state :third aasm_event :myevent do transitions :from => :second, :to => :third end 现在,如果我做mymodel.myeven

我正在使用原子吸收光谱法。我有一个用转换定义的事件。如果引发了事件且模型处于:from状态,则该选项有效。但是,如果模型处于任何其他状态,它将抛出InValidTransition异常

aasm_state :first
aasm_sate  :second
aasm_state :third

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

现在,如果我做mymodel.myevent!当mymodel处于:第一或:第三状态时,aasm抛出InValidTransition。当处于这些状态时,我如何告诉aasm忽略事件?

状态机的关键是要限制可以转换到哪些状态和从哪些状态转换。如果需要上述功能,为什么要使用状态机的约束?你也可以用同样的方法

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

这应该可以满足您的需要。

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

#假设您的aasm对象保存到“dummy”变量中
dummy.aasm.events(允许:true)

您还可以通过以下方式获取名称:

dummy.aasm.events(允许:true).map(&:name)

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

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