箱のプログラミング日記。

えんじにあ奮闘記

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

renderとは

部分テンプレート化する時に使える。

 

複数のページで共通して使われるレイアウト部分がある場合、

そのhtmlを各ファイルでいちいち記述するのは面倒臭いし、美しくない。

 

そこで、その共通部分を抜き出し、独立したファイルとして作成し、

それを呼び込むことで各ビューで共通のhtmlを利用できるようにしよう、ということ。

 

ヘッダーなどの「全ページに共通して反映させたいレイアウト」は

application.htmlに記述するが、

「全ページとは言わないけどこのページとあのページには表示させたい」

みたいな時にrenderを使う。

 

 

renderの使い方  

<%= render partial: " product / product" %>
 

productフォルダ下の_productファイルを読み込む。

 

<%= render partial: "product / product", locals: { number: number} %>

オプションとしてlocalsを使用すると、

render先で利用したい変数を定義することができる。

{ ローカル変数名 : render先で使いたい変数名 }

{ render先で使いたい変数名 : ローカル変数名 }

もちろん、一致していなくて良い。

 

※2019/06/11追記

はじめ、{ ローカル変数名 : render先で使いたい変数名 }と間違えて覚えてしまっていました。

今いるファイルで使っている値をrender先で使いたい値に代入する

とイメージすることで、覚えなおすことができました。

 

<%= render partial: "product / product", locals: { number: number, i: i } %>

渡したい変数が複数ある場合は

「,」で区切り、追加することも可。

 

※2019/06/11追記

form_forの中身を部分テンプレートさせる場合は、form_for内で使われている変数も

localsに渡す必要があるので注意。

 

これがなかなか見つけれられず、初歩的なことにも関わらず丸一日消耗してしまいました・・・汗

 

<%= render partial: "product / product", locals: { number: number, f: f } %>

 具体的に書くとこんな感じ。

 

form_forでは渡している変数が2つあるはず。

doの前のモデルとひもづく変数と、「f」の2つ。

この2つもきちんと変数としてrender先に渡してあげないと、部分テンプレートしたform_forの中身の変数がname errorになってしまいます。

 

 

以下参考:

qiita.com