実行回数:association分+1回
associationを複数のクエリに分けて取得している。
→JOINしていないので、associationの値で絞り込みができない。
例:
Post.all.preload(:user)
# SELECT "posts".* FROM "posts"
# SELECT "users".* FROM "users" WHERE "users"."id" IN (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) [["id", 1], ["id", 2], ["id", 3], ["id", 4], ["id", 5], ["id", 6], ["id", 7], ["id", 8], ["id", 9], ["id", 10]]
絞り込みができない例:
User.preload(:posts).where(posts: { id: 1 })
# ERROR
関連ページ
includes
eager_load
N+1問題
includesメソッドとpreloadメソッドとeager_loadメソッドの使い分け