fv17の日記 - Coding Every Day

Webエンジニアの備忘用ブログです。主にWeb界隈の技術に関して書いています。

【パーシャル】インスタンス変数の直接参照ではなく、localsで値を渡す

なぜlocalsで渡す必要があるのか

インスタンス変数を直接使うと、Viewと特定のControllerとの依存が強まり、別の箇所で再利用しにくくなるため。

悪い例

Controller (良い例と同じ)

class UsersController < ApplicationController
  def show
    @user = User.find(params[:id])
  end
end

View

# herder内で直接@userを参照
<%= render 'header' %>

良い例

View

# herder内では変数userを参照
<%= render 'header', user: @user %>

上記により、将来的に下記のような再利用ができる

<%= render 'header', user: @owner %>

参照

Rails Best Practice

上記と似たようなコードが記載
Rails Best Practices - Replace instance variable with local variable

Qiita - Rails Best Practices の警告をちゃんと考える

Rails Best Practiceを日本語で解説
Rails Best Practices の警告をちゃんと考える - Qiita

Railsガイド レイアウトとレンダリング 3.4.4 ローカル変数を渡す

localsの使い方を解説
レイアウトとレンダリング | Rails ガイド