3

我正在玩一些acts_as_taggable_on_steroids 作为学习练习。我正在查看的版本做了一些我不明白的计算标签计数的事情。所以我想我会使用 PORC(Plain Old Rails Counters)做一个版本:

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) 

大小相同。

如果是这种情况,那就太好了,但只是想检查一下。

4

2 回答 2

2

在集合上调用#size

>> tag.taggings.size

将返回计数器缓存中的值。调用#count

>> tag.taggings.count

将始终强制执行 sql 调用以获取最新计数。

于 2010-06-29T23:34:18.857 回答
0

您是否在迁移中创建了关联列?它需要某个地方来存储缓存。

于 2010-03-27T14:04:06.000 回答