Ruby on rails 如果事件不适用于当前状态(未定义转换),如何告知AASM对事件进行IGNORE?
我正在使用原子吸收光谱法。我有一个用转换定义的事件。如果引发了事件且模型处于:from状态,则该选项有效。但是,如果模型处于任何其他状态,它将抛出InValidTransition异常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
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