У меня есть модель ActiveRecord, возвращающая true
из valid?
(и .errors пуст), но возвращает false
из save()
. Если экземпляр модели действителен, как я могу узнать, что вызвало сбой сохранения?
В рельсах, как я могу узнать, что привело к ошибке .save(), кроме ошибок проверки?
Ответ 1
Проверьте все ваши обратные вызовы.
У меня возникла такая проблема, когда у меня был и метод after_validate, который был неудачным после того, как я сделал кучу изменений в модели. Модель была действительна, но "after_validate" возвращал false, поэтому, если я использовал model.valid
, он сказал true, но затем, если бы я ее сохранил, он дал мне ошибки проверки (прошедшие после обратного вызова after_validate). Это было странно.
Посмотрите на трассировку приложения, и вы сможете увидеть, какая строка кода создает исключение.
Ответ 2
Попробуйте использовать версию bang save!
(с восклицательным знаком в конце) и проверите полученную ошибку.
Ответ 3
Если @user.save
(например) возвращает false
, просто запустите его, чтобы получить все ошибки:
@user.errors.full_messages
Ответ 4
Да, я исправил эту проблему, убедившись, что возвращаю true во всех моих обратных вызовах before_ *, после чего он начинает работать:)
Ответ 5
Проблема была в том, что я забыл добавить валидацию к модели.
class ContactGroup < ActiveRecord::Base
validates_presence_of :name
end
Ответ 6
Энди <record>.new(<data>).save!
рекомендация сработала для меня