Что покрывается save (: validate => false)?
-
27-10-2019 - |
Вопрос
Я только что внедрил несколько пользовательских counter_cache
S Использует код, как это:
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, если я сохраняю свои существующие спасения без проверки?
Решение
Если вы проходите в: 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
Другие советы
Тестирование на рельсах 4.2.6 показывает, что .save(:validate=>false)
действительно пропустит before_validations
а также after_validation
обратный вызов.