我在模型事件中使用state_machine gem。
事件的初始状态为待处理。
当我创建一个事件时,我想运行一个 after_create 回调,看看我是否可以根据事件的属性进行第一次转换。
事件模型还具有检查某些属性是否未更改的验证。
现在我的问题是,当 state_machine 事件 :verify 在 after_create 回调中被调用时,所有值都被标记为从 nil 更改为“初始值”,并且由于上述验证失败而无法进行转换。
现在,我真的不明白这怎么可能。如果 event.changes 是 after_create 回调,如何为所有值返回 nil =>“初始值”?对我来说,似乎在第一次保存事件之前调用了 after_create 回调。我希望它被保存一次,然后进行回调,然后在调用验证事件后尝试保存事件之前,当我调用更改时,只有 state 属性应该发生变化。
一些示例代码:
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