bullet の挙動
N+1 検出用の bullet 便利なので必ずRailsプロジェクトには入れているのだけど、 たまにどっちやねん!となるケースがある。
@offices.each do |office| office.employees.size end
みたいな処理の時、SQLとしては以下のようになるので、
SELECT COUNT(*) FROM `employees` WHERE `employees`.`office_id` = 40
office 毎に employees を引く処理が走るから N+1 っぽいと考え、
@offices = Office.find_by(hoge: 'hogehoge').includes(:employees)
みたいなことをしてみた。
ところがこれをやると bullet が、
Unused Eager Loading detected Office => [:employees] Remove from your finincludes => [:employees]
といってくる。
なんだ、このケースはいらないのか・・と、外してみると、
Need Counter Cache Office => [:employees]
と言われる。
むむむ・・・