N+1問題とは、アソシエーションを利用した場合に限り、データベースへのアクセス回数が多くなってしまう問題のこと。
モデル名.all
としてしまうと、N+1問題にひっかかる。
それを解消するためにincludesメソッドがある。
モデル名.includes(:紐付くモデル名)
と書けばよい。
例:フリマアプリ
class ItemsController < ApplicationController
def index
@items = Item.includes(:user)
end
で、ビューでeachメソッドを使ってインスタンスを取り出す。
app/views/items/index.html.erb
<% @items.each do |item| %>
<%= item.text %>
<%= item.name %>
<% end %>