Подтвердить что ты не робот

Каков порядок обратных вызовов ActiveRecord и проверки?

Мне было интересно, в каком порядке обратные вызовы и проверки, вызываемые при создании объекта ActiveRecord.

Предположим, что у меня есть некоторые пользовательские проверки и обратные вызовы, такие как:

validates :reference_code, :if => :reference_code, :on => :create
before_create :assign_reference

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

4b9b3361

Ответ 1

Самая актуальная версия этого списка для последней версии Rails приведена в ActiveRecord::Callbacks документации. Ниже перечислены списки для Rails 4, 3 и 2.

Рельсы 4

Самая последняя версия этого списка можно найти в Rails 4 Guides.

Создание объекта

  • before_validation
  • after_validation
  • before_save
  • around_save
  • before_create
  • around_create
  • after_create
  • after_save
  • after_commit/after_rollback

Обновление объекта

  • before_validation
  • after_validation
  • before_save
  • around_save
  • before_update
  • around_update
  • after_update
  • after_save
  • after_commit/after_rollback

Уничтожение объекта

  • before_destroy
  • around_destroy
  • after_destroy
  • after_commit/after_rollback

Рельсы 3

Самая последняя версия этого списка можно найти в Rails 3 Guides.

Создание объекта

  • before_validation
  • after_validation
  • before_save
  • around_save
  • before_create
  • around_create
  • after_create
  • after_save

Обновление объекта

  • before_validation
  • after_validation
  • before_save
  • around_save
  • before_update
  • around_update
  • after_update
  • after_save

Уничтожение объекта

  • before_destroy
  • around_destroy
  • after_destroy

Рельсы 2

Самая последняя версия этого списка можно найти в Rails 2.3 Guides

Создание объекта

  • before_validation
  • before_validation_on_create
  • after_validation
  • after_validation_on_create
  • before_save
  • before_create
  • INSERT операция
  • after_create
  • after_save

Обновление объекта

  • before_validation
  • before_validation_on_update
  • after_validation
  • after_validation_on_update
  • before_save
  • before_update
  • UPDATE Операция
  • after_update
  • after_save

Уничтожение объекта

  • before_destroy
  • DELETE Операция
  • after_destroy

Поскольку вам нужно сначала проверить reference_code, метод assign_reference может быть вызван в обратном вызове after_validation или любом обратном вызове, появляющемся после него в списке, указанном выше.