Rails在“not null”列上的奇怪行为

时间:2014-11-23 18:27:44

标签: ruby-on-rails

我有一个名为Order的模型,它有一个名为amount的列,它具有“非空”约束。当我以零数量保存订单实例时,它会抛出错误“PG :: NotNullViolation:ERROR:列中的空值”金额“违反非空约束”而不是返回false。

但是,我有另一个模型User,它还有一个“非空”列email,当我用nil电子邮件保存用户对象时,它不会抛出错误但返回false。

我只是想知道哪一个是正常的。如果第一个是正常行为,那么检查object.save的返回值的重点是什么,因为它不会返回false但是如果有任何错误则抛出错误。

1 个答案:

答案 0 :(得分:0)

Rails会在save方法中触发 rails 验证,如果失败,您将获得false。如果您错过了rails中的验证,在这种情况下是在线状态验证,那么它会将您拥有的任何值传递给数据库,它们将在哪里失败,完全如您所述。

如果您希望rails确保数据的有效性,您需要告诉rails什么是有效的,而不仅仅是数据库。