Вы правы, ошибка проверки по-прежнему вызывает обратный вызов after_validation.Это порядок обратных вызовов:
- before_validation
- after_validation
- before_save
- before_create
- after_create
- after_save
- after_commit
Кроме того, чтобы понять большую цепь событий: в документации сказано, что обратный вызов «before», который возвращает false, остановит цепочку и остановит действие (сохранение, создание, обновление и т. д.).Обратный вызов «after», который возвращает false, остановит цепочку обратных вызовов, но не все действие.
«after_validation» - это последнее, что нужно выполнить, если проверки не пройдены, и там все останавливается.Однако, если они проходят, все остальное оборачивается транзакцией базы данных и откатывается, если что-то идет не так.Так что ваш before_create может, например, создать дочерний объект, и он будет безопасно отменен, если создание самого объекта завершится неудачей.