【问题标题】:Trigger an event whenever the state machine enters a certain state每当状态机进入某个状态时触发事件
【发布时间】:2015-03-25 09:34:57
【问题描述】:

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

每当一个对象进入 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 的事件。

【问题讨论】:

  • 当然 state3 到 state3 不是过渡,因为状态没有改变。
  • 编辑了我的问题。请通过
  • 但是为什么要state3state3,如果有任何具体原因,我们可以尝试不同的方式
  • 编辑了我的问题。请通过
  • 在 UML 中,您所描述的称为“自我转换”(从状态 3 到状态 3)。而自我转换do 执行与状态相关的进入(和退出)动作。所以你的设计可以用 UML 来描述。我不熟悉 ruby​​-on-rails,所以我不知道这些信息是否有帮助。

标签: ruby-on-rails state-machine


【解决方案1】:

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

或者,创建一个更新状态并将问题置于该状态,然后再应用更改。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多