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