my_object.save(false)并不真正跳过我的Active Record验证

时间:2009-03-29 22:39:26

标签: ruby-on-rails ruby activerecord

所以我一直在拉我的头发来解决我一直遇到的这个错误,我终于发现了导致它的原因。当我打电话的时候,我一直都有这样的印象

@my_model.save(false)

我将 跳过 我的ActiveRecord验证。事实证明这是部分正确的。我的对象正在保存到数据库 DESPITE 我的ActiveRecord验证。我的问题存在,因为我的一个验证在验证过程中修改了一个子模型(这是一个24小时位置的调度应用程序,因此当保存午餐时,我会在他们保存的那天检查它们,第二天同时确保用户并不意味着“凌晨2点”。

我的问题是:有没有办法实际跳过我的验证并直接进入数据库?这是正常的ActiveRecord行为还是我应该深入了解我的验证?或者我运气不好,需要重新编写我的验证?

4 个答案:

答案 0 :(得分:12)

  

我的问题存在是因为我的一个验证在验证过程中修改了其中一个子模型

解决这个问题,那么你的问题就会消失。验证不应该修改对象!

答案 1 :(得分:6)

您可能希望在将记录保存到数据库之前使用before_create或其他回调与记录进行交互,而不是尝试在验证程序中执行此操作。

以下是有关ActiveRecord回调的文档: http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html

还有一个关于使用回调的指南,其中包含有关如何跳过它们的一些细节: http://guides.rubyonrails.org/activerecord_validations_callbacks.html

答案 2 :(得分:5)

我同意,您应该使用回调来与记录进行交互。验证不应该修改对象..

如果你仍然觉得有必要这样做..使用

myobject.save_without_validation

答案 3 :(得分:3)

我同意Orion,从不使用验证来修改对象,而是使用像after_save这样的回调。