RailsでN+1問題
- N+1問題
一覧系画面を表示させる際、「全レコード取得 + 各レコードのデータ取得」分だけselect文を実行してしまう。的な問題。
例えばshopとmenuが1対Nの関係のDB構造のとき、以下のコードだと発生する
・sample_controller.rb
class SampleController < ApplicationController def index @menus = Menu.all end end
・sample.html.erb
<% menus.each do |menu| %> <p><%= menu.name %></p> <p><%= menu.shop.name %></p> <--ここでN回selectしてしまう <% end %>
- 解決策
最初にshop情報も一緒に取ってくる
・sample_controller.rb
class SampleController < ApplicationController def index @menus = Menu.includes(:shop).all end end