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 に答える