1

我在模型事件中使用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
4

0 回答 0