1

モデル イベントでstate_machine gemを使用しています。

イベントの初期状態は保留中です。

イベントを作成するとき、after_create コールバックを実行して、イベントの属性に応じて最初の遷移を行うことができるかどうかを確認したいと考えています。

イベント モデルには、特定の属性が変更されていないかどうかをチェックする検証もあります。

今私の問題は、state_machine イベント :verify が after_create コールバックで呼び出されると、すべての値が nil から「初期値」に変更されたものとしてマークされ、前述の検証が失敗したために移行を実行できないことです。

今、私はこれがどのように可能であるかを本当に理解していません。after_create コールバックの場合、event.changes はどのように nil => すべての値に対して「初期値」を返すことができますか? 私には、イベントが初めて保存される前に after_create コールバックが呼び出されたようです。一度保存してからコールバックを作成すると、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
4

0 に答える 0