ループ内でActiveRecordのpluck を使うとN+1になるのは railsのバグだった
https://github.com/rails/rails/issues/28747
Department.limit(10).includes(:employees).each { |x| x.employees.pluck(:name) }
のように、
先読みしていてもループ内でpluckを使ってしまうとN+1になっていたのでmap(&:name)
に書き直していた。
てっきりこういう仕様だと思っていたらバグだった。
5.0.2 では修正されてる。
2.3.0 :021 > Department.limit(10).includes(:employees).each { |x| x.employees.pluck(:name) }
D, [2017-04-13T22:27:36.273152 #67955] DEBUG -- : Department Load (0.5ms) SELECT `departments`.* FROM `departments` LIMIT 10
D, [2017-04-13T22:27:36.276073 #67955] DEBUG -- : Employee Load (1.5ms) SELECT `employees`.* FROM `employees` WHERE `employees`.`department_id` IN (1, 2, 3, 4, 5, 6)
-
category:
- rails