代码之家  ›  专栏  ›  技术社区  ›  BushyMark

my_object.save(false)不会跳过活动记录验证

  •  5
  • BushyMark  · 技术社区  · 17 年前

    所以我一直在努力解决我遇到的这个问题,最后我发现了是什么导致了这个问题。我一直觉得打电话的时候

    @my_model.save(false)
    

    我将成为 跳过 我的ActiveRecord验证。事实证明这是部分正确的。我的对象正在保存到数据库中 尽管 我的ActiveRecord验证。我的问题之所以存在,是因为我的一个验证在验证过程中修改了其中一个子模型(这是一个24小时位置的调度应用程序,因此当午餐被保存时,我会对照它们被保存的当天和第二天进行检查,以确保用户不是指夜班的“凌晨2点”。

    我的问题是:有没有一种方法可以真正跳过我的验证并直接移动到数据库?这是正常的活动记录行为,还是应该深入验证?还是我运气不好,需要重新编写验证?

    4 回复  |  直到 17 年前
        1
  •  6
  •   Gdeglin    17 年前

    在将记录保存到数据库之前,您可能希望在创建或另一个回调之前使用它与记录交互,而不是在验证器内尝试这样做。

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

    这里还有一个关于如何使用回调的指南,其中详细介绍了如何跳过回调: http://guides.rubyonrails.org/activerecord_validations_callbacks.html

        2
  •  12
  •   Orion Edwards    17 年前

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

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

        3
  •  5
  •   Rishav Rastogi    17 年前

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

    如果你仍然觉得有必要这么做……使用

    myobject.save_without_validation
    
        4
  •  3
  •   nitecoder    17 年前

    我同意Orion的观点,永远不要使用验证来修改对象,而是使用类似于保存后的回调。

    推荐文章