ruby aasm gem: 事件名称更改,但允许的方法仍然要求旧事件名称
ruby aasm gem: event name change, but permitted method still ask for old event name
我一直在使用aasm gem (https://github.com/aasm/aasm) 来定义一个对象。它带有几个 public 事件方法。例如:
对于对象 a_machine
,事件 boot_up
会将对象转移到新状态 greeting
。我将能够执行以下查询:a_machine.may_boot_up?
。但是,我将名称 boot_up
更改为 wake_up
。现在下面的方法抛出一个异常:
a_machine.aasm.events(permitted: true)
# undefined method: may_boot_up?
我想问一下permitted
是如何实现的,因为它仍然有一个过时的public方法(与过时的事件名称相关联)。
其他一切正常。有谁知道为什么?或者你能给我进一步的指导吗?
谢谢,
编辑:我有更多线索:
在我将事件名称 :boot_up
更改为 :wake_up
之后,实际发生的是符号 :boot_up
仍然保留在事件数组中,并添加了一个新符号 :wake_up
到那个数组。 a_machine.aasm.events.map(&:name)
returns 事件数组。
更新:现在的问题是:如何从 AASM::Core::Event 中删除事件,因为 :boot_up
是作为事件添加的,通过更改名称,我不小心只添加了一个新事件 :wake_up
.
更改状态机事件后,您需要重新启动 rails console/server。
我一直在使用aasm gem (https://github.com/aasm/aasm) 来定义一个对象。它带有几个 public 事件方法。例如:
对于对象 a_machine
,事件 boot_up
会将对象转移到新状态 greeting
。我将能够执行以下查询:a_machine.may_boot_up?
。但是,我将名称 boot_up
更改为 wake_up
。现在下面的方法抛出一个异常:
a_machine.aasm.events(permitted: true)
# undefined method: may_boot_up?
我想问一下permitted
是如何实现的,因为它仍然有一个过时的public方法(与过时的事件名称相关联)。
其他一切正常。有谁知道为什么?或者你能给我进一步的指导吗? 谢谢,
编辑:我有更多线索:
在我将事件名称 :boot_up
更改为 :wake_up
之后,实际发生的是符号 :boot_up
仍然保留在事件数组中,并添加了一个新符号 :wake_up
到那个数组。 a_machine.aasm.events.map(&:name)
returns 事件数组。
更新:现在的问题是:如何从 AASM::Core::Event 中删除事件,因为 :boot_up
是作为事件添加的,通过更改名称,我不小心只添加了一个新事件 :wake_up
.
更改状态机事件后,您需要重新启动 rails console/server。