只要状态机进入某个状态,就触发一个事件

时间:2015-03-25 09:34:58

标签: ruby-on-rails state-machine

我有一个state_machine,有三种可能的状态state1,state2,state3。

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

在我的state_machine中,我有

      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的原因是因为我有一个表单。只有回答了所有问题,表单才会到达state3。在回答完所有问题后,我正在计算商标。如果用户只是更改答案怎么办?状态将从state3更新到state3。这是我想要从state3触发事件到state3的情况。

1 个答案:

答案 0 :(得分:0)

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

或者,创建更新状态并在应用更改之前将问题置于该状态。