每当状态机进入某个状态时触发事件

问题描述 投票:0回答:2

我有一个状态机,具有三种可能的状态:state1、state2、state3。

每当一个对象进入state_3时,我想触发一个事件event1。

在我的状态机中,我有

      after_transition :on => :state_3, :do => :event1.

但是每当状态从state1变为state3或state2变为state3时,事件就会被正确触发。但是当状态转换是从state3到state3时,event1不会被触发。我怎样才能实现这个目标?

我知道 state3 到 state3 不是 state_transition。我可以使用 after_save 回调之类的东西并检查状态是否为 state3。但我想知道在state_machine中是否有有效的方法来实现这一点?

我之所以要触发state3上的事件到state3是因为,我有一个表单。仅当所有问题都得到解答时,表单才会到达状态 3。回答完所有问题后,我正在计算分数。如果用户只是更改答案怎么办?状态只会从 state3 更新到 state3。这就是我想触发从state3到state3的事件的情况。

ruby-on-rails state-machine
2个回答
0
投票

当用户更改答案时,他们会重新运行状态 2 到 3 的转换。因此,在应用更改之前将状态更改为 state2。

或者,创建一个更新状态并在应用更改之前将问题放入该状态。


0
投票

自转换(目标状态与源状态相同的转换)可以在 state_machines gem 中编码,如下所示:

event :event1
  transition :state3 => :state3
end
after_transition on: :event1 do |myobject, transition|
  myobject.foobar
end
© www.soinside.com 2019 - 2024. All rights reserved.