我正在玩一系列acts_as_taggable_on_steroids作为学习练习。我正在看的版本做了一些我不明白计算标签计数的东西。所以我想我会做使用PORC(普通老式Rails的计数器)版本:访问ruby计数器缓存
class Tagging < ActiveRecord::Base #:nodoc:
belongs_to :tag, :counter_cache => "tagging_counter_cache"
...
我想,当我访问tag.taggings.count但显然不是tagging_counter_cache被透明地访问?我真的必须明确地访问tag.tagging_counter_cache吗?
>> tag.taggings.count
SQL (0.7ms) SELECT count(*) AS count_all FROM `taggings` WHERE (`taggings`.tag_id = 16)
相同的大小。
这很酷,如果是这样的情况,但只是想检查。
'#size'会给你标签集合的大小。它并不总是等于计数器缓存值。例如,您可以在此集合中创建一个尚未保存的新对象。在这种情况下,计数器缓存列将只保存已保存对象的数量,而'#size'将返回包含新对象的集合中的对象数量。要获得计数器缓存的确切值,请使用'tag [:taggings_count]'。 'tag.taggings_count'应该可以工作,但我不确定。 – skalee 2011-01-28 17:13:08