我刚刚使用以下代码实现了许多自定义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_with
或before_validation
之类的内容?
如果我保留现有的保存而不进行验证,我的自定义counter_caches会受到影响吗?
答案 0 :(得分: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
答案 1 :(得分:2)
在Rails 4.2.6上测试表明,.save(:validate=>false)
实际上会跳过before_validations
和after_validation
回调。