読者です 読者をやめる 読者になる 読者になる

counter_cacheは、合計値を計算しているわけではないようだ

まぁ、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されるみたい。自分は合計値を計算していると思っていて時間を無駄にした。途中からカウンターキャッシュ導入しようと思っている人は、ワンライナーなどでデータを入れてあげる必要がありそう。

カウンターキャッシュ使うくらいなんだから、合計値を計算してどうする。インクリメント・デクリメントで実装してるに決まってるだろうに!!