n+1

いくつか残っていたn+1問題を解決するために、:includeをごりごり挿入。 以下メモ。 普通のinclude :include => :item 複数include :inluce => [:item, :another, :yetanother] 関連先もinclude :inluce => [{:item => :related_items}, :another] acts_as_treeを使ってると、:include => :childrenで子ツリーを先読みできた。すばらしい。 (has_manyの時はちゃんと複数形にすること) 注意点として、:throughで中間テーブルを使って、かつ関連先が削除されていた場合、 @item.related_itemsだと削除済みのエントリは読み込まれないけど、Item.find(:all, :include => :related_items)にしてると配列にnilが入ってしまい、関連先の処理をしようとしたところで怒られてしまう。(お約束のnil class発生) 回避するためには中間テーブルに:dependent => :destroyを付けておかないといけないが、不幸にしてやってなかった場合には手でテーブルを編集するか、@item.related_items.compact.eachとかダサいことをしなくてはならない。しょんぼり。