嗨我在rails中使用简单的计数器缓存时遇到了问题。我有以下型号:
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都没有相应更新。
我在主题上找到了这个:How to update counter_cache when updating a model? 我的情况解决方案看起来像这样:
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
但是 - 我问自己 - 为什么这不是第一手的铁轨?我在文档中找不到关于这个问题的任何内容,对我来说,使用rails中的内置counter_cache几乎无法使用,如果真的如此,它只支持创建和销毁 - 不更新!任何人都可以给出一个很好的解释,为什么这是?我真的有必要建立一个回调并密切关注我自己的关系吗?
顺便说一句。我正在使用3.1