はじめに Rails のコントローラーで User に紐づく全てのアソシエーションを preload して、N+1 を解消しようとしました。 user = User.preload(:posts, :comments).find(params[:id]) SQL のログを確認すると、 preload によって関連データがまとめて取得されていることを確認できました。 しかし、実際には後続でクエリが発行されており、無駄なクエリ発行を抑えられていませんでした。 原因 ログをよく見ると、意図しないタイミングで posts や comments に対する追加のクエリが発行されていました。 あるクラスのメ…