当前位置:  开发笔记 > 后端 > 正文

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

如何解决《my_object.save(false)并不真正跳过我的ActiveRecord验证》经验,为你挑选了3个好方法。

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

@my_model.save(false)

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

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



1> Orion Edward..:

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

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



2> Gdeglin..:

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

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

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



3> Rishav Rasto..:

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

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

myobject.save_without_validation

推荐阅读
mobiledu2402851377
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有