まぁ、APIに書いてあるから説明するのもどうかと思うんだが、日本語での情報は見た記憶がないので誰かのために残しておく。
class Comment < ActiveRecord::Base belongs_to :article, :counter_cache => true # counter_cacheを有効にする際には、予め articles に comments_count というカラムを作っておくこと。カラムの名前は一応自由に付けることも可能。その際には、trueではなく、カラム名を指定する。 end class Article < ActiveRecord::Base has_many :comments end
コメントの数を毎回 select count(*) from comments; するのもコストかかるから、articlesの中に書いておこうというカウンターキャッシュ。こりゃ便利だと思っていたが、Commentモデルが作成されるたびに+1、削除されるたびに−1されるみたい。自分は合計値を計算していると思っていて時間を無駄にした。途中からカウンターキャッシュ導入しようと思っている人は、ワンライナーなどでデータを入れてあげる必要がありそう。
カウンターキャッシュ使うくらいなんだから、合計値を計算してどうする。インクリメント・デクリメントで実装してるに決まってるだろうに!!