Привет У меня проблемы с простым счетчиком кэша в рельсах.У меня есть следующие модели:
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