N+1問題を解消するにはincludeメソッドを使う。
#TaskモデルにCategoryとUserモデルが紐づいている場合 @tasks = Task.includes(:category, :users).order(id: :desc).page(params[:page]).per(200)
小テーブルのレコードを最初にすべて取っておいてハッシュの形で使うこともできる
#TaskモデルにCategoryとUserモデルが紐づいている場合 @tasks = Task.includes(:users).order(id: :desc).page(params[:page]).per(200) @categories = Category.all.pluck(:id, :name).to_h #[ [id_1, name_1], [id_2, name_2] ] pluckで配列を作る #{ id_1 => name_1, id_2 => name_2 } to_hでハッシュに変換 #以下のように取り出すことができる @categories[task.category_id]
データ数の多いハッシュをキャッシュしておくとサーバーのメモリが圧迫される為注意が必要。