我有一个名为Order
的模型,它有一个名为amount
的列,它具有“非空”约束。当我以零数量保存订单实例时,它会抛出错误“PG :: NotNullViolation:ERROR:列中的空值”金额“违反非空约束”而不是返回false。
但是,我有另一个模型User
,它还有一个“非空”列email
,当我用nil
电子邮件保存用户对象时,它不会抛出错误但返回false。
我只是想知道哪一个是正常的。如果第一个是正常行为,那么检查object.save
的返回值的重点是什么,因为它不会返回false但是如果有任何错误则抛出错误。
答案 0 :(得分:0)
Rails会在save
方法中触发 rails 验证,如果失败,您将获得false
。如果您错过了rails中的验证,在这种情况下是在线状态验证,那么它会将您拥有的任何值传递给数据库,它们将在哪里失败,完全如您所述。
如果您希望rails确保数据的有效性,您需要告诉rails什么是有效的,而不仅仅是数据库。