我正在使用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忽略该事件?
答案 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)