save(:validate => false) 涵盖了什么?

发布于 2024-10-23 19:57:04 字数 510 浏览 1 评论 0原文

我刚刚使用如下代码实现了许多自定义 counter_cache

def after_save
    self.update_counter_cache
end
def after_destroy
    self.update_counter_cache
end
def update_counter_cache
    self.company.new_matchings_count = Matching.where(:read => false).count
    self.company.save
end

我的问题是 - 命令 Model.save(:validate => false) 实际上阻止了什么除了 validates_withbefore_validation 之类的东西之外?

如果我保留现有的保存而不进行验证,我的自定义 counter_cache 是否会受到影响?

I just implemented a number of custom counter_caches using code like this:

def after_save
    self.update_counter_cache
end
def after_destroy
    self.update_counter_cache
end
def update_counter_cache
    self.company.new_matchings_count = Matching.where(:read => false).count
    self.company.save
end

My question is this - what does the command Model.save(:validate => false) actually prevent beyond things like validates_with or before_validation?

Will my custom counter_caches be affected if I keep my existing saves without validation?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

别低头,皇冠会掉 2024-10-30 19:57:04

Rails 4.2.6 上的测试表明 .save(:validate=>false) 实际上会跳过 before_validationsafter_validation 回调。

Testing on Rails 4.2.6 shows that .save(:validate=>false) will actually skip before_validations and after_validation callbacks.

生寂 2024-10-30 19:57:04

如果您传入 :validate=>false,它会跳过 valid?命令。其他一切功能都相同。

您可以在此处查看代码: http://api.rubyonrails.org/classes/ActiveRecord /Validations.html

def save(options={})
  perform_validations(options) ? super : false
end

...

if perform_validation
  valid?(options.is_a?(Hash) ? options[:context] : nil)
else
  true
end

If you pass in the :validate=>false, it skips the valid? command. Everything else functions the same.

You can check the code out here: http://api.rubyonrails.org/classes/ActiveRecord/Validations.html

def save(options={})
  perform_validations(options) ? super : false
end

...

if perform_validation
  valid?(options.is_a?(Hash) ? options[:context] : nil)
else
  true
end
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文