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