Обновлять кеш счетчика при выполнении коллекции << (объект,…) - PullRequest
1 голос
/ 07 декабря 2011

Привет У меня проблемы с простым счетчиком кэша в рельсах.У меня есть следующие модели:

class CarImage < ActiveRecord::Base
  belongs_to :car, :counter_cache => :images_count
end

class Car < ActiveRecord::Base
  has_many :images, :class_name => "CarImage", :dependent => :destroy, :limit => 4
end

При этом возникает проблема:

car1.images << car2.images

Ни одна из images_count на двух автомобилях не обновляется соответствующим образом.

Я нашел это по теме: Как обновить counter_cache при обновлении модели? И в моем случае решение будет выглядеть примерно так:

class Car < ActiveRecord::Base
  has_many :images, :class_name => "CarImage", :dependent => :destroy, :limit => 4
  after_save :update_counter, :if => :car_id_changed?

  private

  def update_counter
    new_car = Car.find(car_id)
    Car.increment_counter(:images_count, new_car.id)
    if car_id_was.present?
      old_car = Car.find(car_id_was)
      Car.decrement_counter(:images_count, old_car.id)
    end
  end

end

Но - я спрашиваю себя- Почему это не встроить в рельсы из первых рук?Я не могу найти ничего в документации по этой проблеме, и для меня использование встроенного counter_cache в rails практически невозможно, если это действительно так, что он поддерживает только создание и уничтожение, а не обновление!Кто-нибудь может дать хорошее объяснение, почему это так?Неужели для меня действительно необходимо создать обратный вызов и следить за отношениями с самим собой?

Кстати.Я использую 3.1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...