使用after_create回调和验证on_update来rails state_machine

时间:2012-04-01 09:48:09

标签: ruby-on-rails state-machine after-create

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

0 个答案:

没有答案
相关问题