我有一个ActiveRecord模型,该模型true
从返回valid?
(并且.errors为空),但是false
从返回save()
。如果模型实例有效,我如何找出导致保存失败的原因?
Answers:
检查所有回调。
我遇到了这样的问题,在我对模型进行了大量更改之后,“ 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 }
尝试使用爆炸式版本save!
(末尾带有感叹号),然后检查产生的错误。
save!
可以引发ActiveRecord::RecordInvalid
(因为它运行验证),或者ActiveRecord::RecordNotSaved
这就是您想要挽救的对象。
.save
非验证失败的基本问题的最不满意的答案。“最不满意”的资格指的是Rails,而不是这个答案。
如果@user.save
(例如)返回false
,则只需运行以下命令即可获取所有错误:
@user.errors.full_messages
我遇到的问题是我忘记将验证添加到模型中。
class ContactGroup < ActiveRecord::Base
validates_presence_of :name
end