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

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]

と言われる。

むむむ・・・