【发布时间】:2009-03-29 22:39:26
【问题描述】:
所以我一直在努力解决我遇到的这个错误,我终于找到了导致它的原因。我一直有这样的印象,当我打电话时
@my_model.save(false)
我会跳过我的 ActiveRecord 验证。事实证明这是部分正确的。我的对象正在保存到数据库 尽管 我的 ActiveRecord 验证。我的问题存在是因为我的一个验证在验证过程中修改了其中一个子模型(这是一个 24 小时位置的调度应用程序,因此当午餐被保存时,我会根据他们保存的日期和第二天检查它们还要确保用户不是指“凌晨 2 点”来过夜。
我的问题是:有没有办法真正跳过我的验证并直接进入数据库?这是正常的 ActiveRecord 行为还是我应该更深入地进行验证?还是我运气不好,需要重新编写验证?
【问题讨论】:
-
所以您说验证代码仍在运行,只是忽略了它们的结果,这是一个问题,因为您在验证中修改了模型。我会使用验证以外的方法来清理数据。
-
就是这样!我猜这是我的最终答案,但我想我会试试运气,看看能不能找到另一个。
-
使用验证来后处理您的业务对象绝对是一种味道。验证旨在检查数据,而不是修改数据。要修改,请改用各种 ActiveRecord 生命周期钩子:before/after-save、before/after-create 等。
标签: ruby-on-rails ruby activerecord