В rails, как я могу узнать, что вызвало сбой .save (), кроме ошибок валидации? - PullRequest
80 голосов
/ 17 января 2011

У меня есть модель ActiveRecord, которая возвращает true из valid? (и .errors пуста), но возвращает false из save(). Если экземпляр модели действителен, как я могу узнать, что вызвало сбой сохранения?

Ответы [ 5 ]

104 голосов
/ 17 января 2011

Попробуйте использовать версию взрыва save! (с восклицательным знаком в конце) и проверьте полученную ошибку.

95 голосов
/ 17 января 2011

Если @user.save (например) возвращает false, просто запустите это, чтобы получить все ошибки:

@user.errors.full_messages
45 голосов
/ 17 января 2011

Проверьте все ваши обратные вызовы.

У меня была такая проблема, когда у меня был метод "after_validate", который не работал после того, как я сделал несколько изменений в модели. Модель была действительной, но «after_validate» возвращал false, поэтому, если я использовал model.valid, он сказал «true», но затем, если я сохранил, он дал мне ошибки проверки (пропущенные из обратного вызова after_validate). Это было странно.

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

2 голосов
/ 28 мая 2013

Да, я исправил эту проблему, убедившись, что возвращаю true во всех моих обратных вызовах before_ *, тогда он начинает работать:)

0 голосов
/ 06 марта 2015

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

class ContactGroup < ActiveRecord::Base
  validates_presence_of :name
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...