renderメソッドの用途
指定したビューを呼び出し
コントローラから別のコントローラの配下にあるテンプレートを使用する場合
render 'ファイル名'
この記述の場合ファイル名の部分にusers/newのように「 / 」が含まれるとこのビューは別のコントローラの配下にあるとrailsが認識してくれる
コントローラと同じ配下にあるテンプレートを使用する場合
render :アクション名
パーシャルの呼び出し
partial: オプションでパーシャルファイル指定する場合
render partial: 'ファイル名'
localsオプションを使ってパーシャル内で使う変数を定義する場合
<%= render partial: 'ファイル名', locals: { '部分テンプレート内で使う変数': '変数に入れる値' } %>
またlocalsオプションではパーシャル内で使用する変数を複数定義することができる
また省略記法もあり
<%= render 'board', board: board %>
のようにpartialを省略して記述するとき、localsオプションも省略する必要がある!!
逆にloaclsオプションを使う場合、partialオプションは省略できない
また、asオプションでパーシャルで使われるローカル変数を異なる名前で指定できる
boardではなくcaseにしたい場合
<% render 'board', as: 'case' %>
objectオプションではパーシャルで出力するオブジェクトを直接指定する場合に使用する
<%= render partial: 'board', object: @item %>
パーシャルはデフォルトでテンプレートと同じ名前を持つローカル変数(今回はboard)に自身のオブジェクト(Board)を持つが、objectオプションでローカル変数に別のオブジェクトを指定できる
eachを使ったパーシャルの繰り返しの省略記法
例えば、以下のコードがある
<% @users.each do |user| %> <%= user.name %> <%= user.email %> <% end %>
このコードを
# _user.html.erb <%= user.name %> <%= user.email %>
とパーシャル化して繰り返し表示したい場合
<% @users.each do |user| %> <%= render 'user', user: user %> <% end %>
となる、これをcollectionオプションを使うことで記述を
<%= render 'user', collection: @users %>
と1行だけで記述することができる
collectionオプションは指定した変数の要素の数だけパーシャルを繰り返し表示してくれる
また、この時呼び出すパーシャルがviewフォルダ内のusersフォルダに存在、テンプレート名が_user.html.erb、パーシャル内で使う変数名が、userbの場合
<% render @users %>
とより省略した記述ができる
参考文献
【Rails】部分テンプレートの使い方を徹底解説! | Pikawaka - ピカ1わかりやすいプログラミング用語サイト