N+1問題とは??
userは複数のpostsをもつ 「user has_many posts」などの関係で、postsを取得する際にpostsの数だけSQLクエリが発行されること。
対策
includesを使う!
モデル名.includes(:関連名)
*関連名はテーブル名ではない
例えば上記の例では
@posts = Post.all.includes(:user)
となる。
n:1:nの場合
userがcommentを持っている時
user has_many posts user has_many comments
comment belongs_to user
@posts = Post.all.includes(user: :comments)
となる。
ちなみにbulletというgemを使うことで開発時に自動でN+1を検知してくれる!