Ruby on rails rails状态\u计算机,在\u更新时具有创建后回调和验证

Ruby on rails rails状态\u计算机,在\u更新时具有创建后回调和验证,ruby-on-rails,state-machine,after-create,Ruby On Rails,State Machine,After Create,我正在模型活动中使用gem 事件的初始状态为挂起 当我创建一个事件时,我想运行一个after_create回调,看看是否可以根据事件的属性进行第一次转换 事件模型还有一个验证,用于检查某些属性是否没有更改 现在我的问题是,当在after_create回调中调用state_machine event:verify时,所有值都标记为从nil更改为“initial value”,并且由于上述验证失败,无法进行转换 现在,我真的不明白这怎么可能。 如果event.changes是一个after_crea

我正在模型活动中使用gem

事件的初始状态为挂起

当我创建一个事件时,我想运行一个after_create回调,看看是否可以根据事件的属性进行第一次转换

事件模型还有一个验证,用于检查某些属性是否没有更改

现在我的问题是,当在after_create回调中调用state_machine event:verify时,所有值都标记为从nil更改为“initial value”,并且由于上述验证失败,无法进行转换

现在,我真的不明白这怎么可能。 如果event.changes是一个after_create回调,它如何为所有值返回nil=>“初始值”? 在我看来,after_create回调似乎是在第一次保存事件之前调用的。 我希望它保存一次,然后进行回调,然后在调用verify事件后尝试保存事件之前,当我调用changes时,只有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
class事件:挂起do
...
国家:待定
国家:已核实
...
事件:验证do
转换:挂起=>:已验证
终止
终止
...
验证:验证\u某些\u属性\u没有\u更改,:on=>:更新
创建后:初始\u验证\u检查
...
私有的
def初始确认检查
验证如果一切都好的话?
终止
...
终止