rails state_machine с обратным вызовом after_create и проверкой on_update - PullRequest
1 голос
/ 01 апреля 2012

Я использую камень 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
...