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