Ruby on Rails - after_validation, если они действительны?

Прямо сейчас, из того, что я знаю, будет вызываться after_validation, даже если модель не прошла проверку. Есть ли способ вызвать его только в том случае, если модель действительна? Я попытался добавить return false unless self.valid? в метод after_validation, но это снова запустит проверку и создает бесконечный цикл.

Ответы

Ответ 1

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

return false unless self.errors.empty?

Ответ 2

Задумывались ли вы об использовании обратного вызова before_save?

Я считаю, что это будет вызываться только в том случае, если объект действителен.

Ответ 3

Я знаю, что это старый вопрос, но я столкнулся с той же ошибкой при использовании специальной проверки на модели, которую я создал. Глядя на docs, есть часть, охватывающая пользовательские методы, и она утверждает, что такие проверки вызывается каждый раз при методе .valid?. Вероятно, почему был вызван бесконечный цикл, когда был вызван обратный вызов :after_validation.