如何在Rails中调试静默数据库错误(例如"保存")?

use*_*584 5 debugging activerecord ruby-on-rails ruby-on-rails-3

如何获得有关Rails中静默发生的错误的更多信息,例如@ object.save?

Sim*_*tsa 10

添加爆炸,以便在验证失败时引发错误.

@article.save!
# ActiveRecord::RecordInvalid: Validation failed: Title can't be blank...
Run Code Online (Sandbox Code Playgroud)

save如果您不希望验证失败,请始终优先使用此方法.


use*_*584 6

根据这篇文章,类似下面的工作:

logger.debug @item.errors.full_messages
Run Code Online (Sandbox Code Playgroud)


jpg*_*eek 5

有时,AR会由于验证错误以外的其他原因而静默失败。还有几件要检查的事项:

  • 不返回true的AR回调(例如before_save)
  • 无效的父母/子女记录
  • @ item.valid ?, @ item.errors.full_messages
  • @ item.changes,@ item.changed?

我还包括了user456584的关于检查验证错误的推荐。正如Semyon所说,@ item.save!即使它不是特别有用,也至少会引发一个Exception。