У мене є модель ActiveRecord, яка повертається true
з valid?
(а .errors порожня), але повертається false
з save()
. Якщо екземпляр моделі є дійсним, як я можу дізнатися, що спричиняє помилку збереження?
У мене є модель ActiveRecord, яка повертається true
з valid?
(а .errors порожня), але повертається false
з save()
. Якщо екземпляр моделі є дійсним, як я можу дізнатися, що спричиняє помилку збереження?
Відповіді:
Перевірте всі свої зворотні дзвінки.
У мене була така проблема, як у мене, і метод "after_validate", який виявився невдалим після того, як я вніс купу змін до моделі. Модель була дійсною, але функція "after_validate" повертала false, тому, якщо я використовував model.valid
її, сказав true, але якщо я її зберігав, це дало мені помилки перевірки (передані через зворотний виклик after_validate). Це було дивно.
Подивіться на трасування програми, і ви зможете побачити, який рядок коду викликає виняток.
"Hey! That's MY fake leg!" # Believe it or not, this is important
. Не те щоб я це зробив. ;)
true.tap { do_something }
Спробуйте використати версію bang save!
(зі знаком оклику в кінці) та перевірити отриману помилку.
save!
може підвищити ActiveRecord::RecordInvalid
(оскільки він запускає перевірку), або приблизно ActiveRecord::RecordNotSaved
так ви захочете врятувати.
.save
збої, які не пов’язані з валідацією. Кваліфікація "найменш незадовільна" стосується Rails, а не цієї відповіді.
Якщо @user.save
(наприклад) повертається false
, просто запустіть це, щоб отримати всі помилки:
@user.errors.full_messages