Вопрос

Я только что внедрил несколько пользовательских counter_cacheS Использует код, как это:

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 обратный вызов.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top