Railsの部分テンプレートに変数を渡す


どうして変数を渡すことが必要か

コントローラに定義していたインスタンス変数を部分テンプレートに表示させようとしたところ、nilになっていた。色々と調べて見ると部分テンプレートではインスタンス変数の使用はオススメできないようだ。ではどうすればいいか。

部分テンプレートにlocalsで値を渡す

通常部分テンプレートを描画するには

<%= render "partial_template_name" %>

とすれば良いみたいなのですが、これに下記をつけ加えると変数が渡ります。

locals: { foo: @foo, hoge: @hoge }

上記2つをつなげて、

<%= render partial: "partial_template_name",  locals: { foo: @foo, hoge: @hoge } %>

のようにすれば描画する部分テンプレート内でfoohogeという変数に@foo@hogeの値が入って使用することができます。

参考記事

Rails 部分テンプレートの使い方