5

counter_cache我刚刚使用这样的代码实现了一些 custom :

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

我的问题是——除了or之Model.save(:validate => false)类的东西之外,该命令实际上还能防止什么?validates_withbefore_validation

如果我在未经验证的情况下保留现有的保存,我的自定义 counter_caches 会受到影响吗?

4

2 回答 2

3

如果你传入 :validate=>false,它会跳过有效的?命令。其他一切功能相同。

你可以在这里查看代码: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
于 2011-03-18T18:20:32.197 回答
3

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

于 2017-01-17T06:53:25.443 回答