Domanda

Ho appena implementato una serie di abitudini counter_cacheS usando codice come questo:

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

La mia domanda è questa, cosa fa il comando Model.save(:validate => false) effettivamente impedire al di là delle cose come validates_with o before_validation?

Il mio Counter_Caches personalizzato sarà interessato se mantengo i miei salvataggi esistenti senza convalida?

È stato utile?

Soluzione

Se passi in: validate => false, salta il valido? comando. Tutto il resto funziona allo stesso modo.

Puoi controllare il codice qui: http://api.rubyonrails.org/classes/acreverecord/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

Altri suggerimenti

Test su Rails 4.2.6 lo mostra .save(:validate=>false) salterà davvero before_validations e after_validation callbacks.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top