如果事件被触发而没有在rails中实际触发事件,是否有一个AASM方法来获取下一个状态

时间:2017-05-09 07:00:37

标签: ruby-on-rails aasm

我正在尝试为AASM构建流程图。我有一个状态机,每个状态都有很多状态和很多事件。从AASM状态机定义可视化机器很困难。要做到这一点,我想要三种方法如下,

1)返回所有状态的方法。这已由AASM提供,即aasm.states.map(&:name)

2)返回特定状态的所有事件的方法。 AASM已经提供了一种方法,可以返回当前状态的所有事件,即aasm.events.map(&:name)。这几乎是我想要的,但我想将状态传递给方法。而不是使用当前状态我想使用传递的状态。

3)排除状态和事件的方法。该方法应在调用时返回下一个状态,而不实际更改状态机中的任何内容。像这样的东西,

next_1_1 = next_state(state1, event1)
next_1_2 = next_state(state1, event2)
next_1_3 = next_state(state1, event3)
next_2_4 = next_state(state2, event4)
next_2_5 = next_state(state2, event5)
next_2_6 = next_state(state2, event6)

有这样的可用吗?还有其他方法可以实现我想要的吗?

更新

根据@ puneet18的回答,我的状态图如下

State           Event       next state
----------------------------------------
:not_started    :start      :in_progress
:in_progress    :finish     :finished
                :reassign   :reassigned
:finished       :reassign   :reassigned

如何使用适用于任何状态机的代码块生成这样的表,不管它有多复杂?

0 个答案:

没有答案