Accessing ruby counter cache
I'm playing around with a fork of acts_as_taggable_on_steroids as a learning exercise. The version I'm looking at does some stuff I don't understand to calculate Tag counts. So I thought I'd do a version using PORC (Plain Old Rails Counters):
class Tagging < ActiveRecord::Base #:nodoc:
belongs_to :tag, :counter_cache => "tagging_counter_cache"
...
I thought tagging_counte开发者_Go百科r_cache was transparently accessed when I access tag.taggings.count but apparently not? Do I really have to access tag.tagging_counter_cache explicitly?
>> tag.taggings.count
SQL (0.7ms) SELECT count(*) AS count_all FROM `taggings` WHERE (`taggings`.tag_id = 16)
Same for size.
It's cool if that's the case but just wanted to check.
Calling #size on the collection
>> tag.taggings.size
will return the value in the counter cache. Calling #count
>> tag.taggings.count
will always force a sql call to get the latest count.
Did you create the associated column in your migration? It needs someplace to store the cache.
精彩评论