我在模型事件中使用state_machine gem。
事件的初始状态正在等待处理。
当我创建一个事件时,我想运行一个after_create回调,看看我是否可以根据事件的属性进行第一次转换。
事件模型还有一个验证,用于检查某些属性是否未更改。
现在我的问题是,当在after_create回调中调用state_machine事件:verify时,所有值都被标记为从nil变为“initial value”,并且由于上述验证失败而无法进行转换。
现在,我真的不明白这是怎么回事。 event.changes如何返回nil =>如果是after_create回调,所有值的“初始值”? 对我来说,似乎在第一次保存事件之前调用了after_create回调。 我希望它能够被保存一次然后进行回调,然后只有在我调用更改之前调用更改之后才应该更改state属性。在调用verifiy事件之后我尝试保存我的事件。
一些示例代码:
class Event < ActiveRecord::Base
state_machine :initial => :pending do
...
state :pending
state :verified
...
event :verify do
transition :pending => :verified
end
end
...
validate :validate_some_attributes_did_not_change, :on => :update
after_create :initial_verification_check
...
private
def initial_verification_check
verify! if everything_fine?
end
...
end