5

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は影響を受けますか?

4

2 に答える 2

3

: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
于 2011-03-18T18:20:32.197 に答える