rails state_machine с обратным вызовом after_create и проверкой on_update

Я использую камень state_machine в модельном событии.

Исходное состояние события ожидает рассмотрения.

Когда я создаю событие, я хотел бы запустить обратный вызов after_create, чтобы посмотреть, смогу ли я сделать первый переход в зависимости от атрибутов события.

Модель событий также имеет проверку, которая проверяет, не изменились ли определенные атрибуты.

Теперь моя проблема заключается в том, что когда событие state_machine: verify вызывается в обратном вызове after_create, все значения помечаются как измененные с nil на "начальное значение", и переход не может быть выполнен из-за того, что упомянутая проверка не удалась.

Теперь я действительно не понимаю, как это вообще возможно. Как event.changes может вернуть nil => "начальные значения" для всех значений, если это обратный вызов after_create? Мне кажется, что обратный вызов after_create вызывается до того, как событие было сохранено в первый раз. Я ожидал, что он будет сохранен один раз, затем произведет обратный вызов, и тогда только атрибут состояния должен был измениться, когда я вызываю изменения, прежде чем попытаться сохранить свое событие после вызова события verifyiy.

Пример кода:

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 ответов

Другие вопросы по тегам