親子関係のテーブルをselectした時に
ぶら下がってる子テーブルの件数も表示させたいという場合
counter_cacheが使える。
通常、子のデータも欲しいときはincludeオプション(has_many または find時に随時指定)
とかで同時に読ませておいて
viewでParent.Children.size とかでやるのかと思っていたが
これだと、毎回select count(*)が走ってしまう。
使い方
参考URLまんまですが
- モデル belongs_toに :counter_cache => true を設定
- 親テーブルに chirdren_count を :default => 0 で追加
- あとはviewで Parent.Children.size
注意点
途中でcouter_cacheを使う場合は、migrate時に値が0になっちゃうので
参考URLのようにupdate_countersを使うのが吉。
あと、「RailsによるアジャイルWebアプリケーション開発 」には
子を親に手動でリンクしてsaveする場合は、incrementされないって書いてるけど
まぁ、あんまりやらんと思われるので、あまり気にせず
使ってもいいかなと思った。