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

时间:2011-03-18 18:09:48

标签: ruby-on-rails ruby-on-rails-3 counter-cache

我刚刚使用以下代码实现了许多自定义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_caches会受到影响吗?

2 个答案:

答案 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_validationsafter_validation回调。