renderとは
部分テンプレート化する時に使える。
複数のページで共通して使われるレイアウト部分がある場合、
そのhtmlを各ファイルでいちいち記述するのは面倒臭いし、美しくない。
そこで、その共通部分を抜き出し、独立したファイルとして作成し、
それを呼び込むことで各ビューで共通のhtmlを利用できるようにしよう、ということ。
ヘッダーなどの「全ページに共通して反映させたいレイアウト」は
application.htmlに記述するが、
「全ページとは言わないけどこのページとあのページには表示させたい」
みたいな時にrenderを使う。
renderの使い方
productフォルダ下の_productファイルを読み込む。
オプションとしてlocalsを使用すると、
render先で利用したい変数を定義することができる。
{ ローカル変数名 : render先で使いたい変数名 }
{ render先で使いたい変数名 : ローカル変数名 }
もちろん、一致していなくて良い。
※2019/06/11追記
はじめ、{ ローカル変数名 : render先で使いたい変数名 }と間違えて覚えてしまっていました。
今いるファイルで使っている値をrender先で使いたい値に代入する
とイメージすることで、覚えなおすことができました。
渡したい変数が複数ある場合は
「,」で区切り、追加することも可。
※2019/06/11追記
form_forの中身を部分テンプレートさせる場合は、form_for内で使われている変数も
localsに渡す必要があるので注意。
これがなかなか見つけれられず、初歩的なことにも関わらず丸一日消耗してしまいました・・・汗
具体的に書くとこんな感じ。
form_forでは渡している変数が2つあるはず。
doの前のモデルとひもづく変数と、「f」の2つ。
この2つもきちんと変数としてrender先に渡してあげないと、部分テンプレートしたform_forの中身の変数がname errorになってしまいます。
以下参考: