Является ли атрибут after_validation каждый раз на активной записи?

Является ли after_validation hook вызываемым каждый раз, даже если проверка не выполнена? Я попробовал пару тестов, и кажется, что это так!

Ответы

Ответ 1

Вы правы, ошибка проверки еще вызывает обратный вызов after_validation. Это порядок обратных вызовов:

  • before_validation
  • after_validation
  • before_save
  • before_create
  • after_create
  • after_save
  • after_commit

Кроме того, чтобы понять большую цепочку событий: в документации говорится, что обратный вызов "до", который возвращает false, остановит цепочку и остановит действие (сохранение, создание, обновление и т.д.). Обратный вызов "после", который возвращает false, остановит цепочку обратных вызовов, но не все действие.

"after_validation" - последнее, что нужно выполнить, если проверки не пройдут, и все там остановлено. Если они пройдут, все остальное завершается транзакцией базы данных и откатывается, если что-то пойдет не так. Таким образом, ваш "before_create" может создать дочерний объект, например, и он будет безопасно отменен, если само создание объекта не удастся.