パーシャル(部分テンプレート)をrenderでcollectionオプションで呼び出す
こんにちは、りゅうじです。
こちらは 昨日書いたlocalsオプション の記事です。知らない方は合わせて読んでみてください。
https://ryujisurf55.hatenablog.com/
render
をパーシャルで呼び出す際に
collectionオプション
という繰り返しパーシャルをレンダリングするものです。
まずcollectionメソッドを使用しなかったとき
locals
の時と同様のコントローラーに 今回は@hoges
とインスタンス変数を定義されている状態で(複数のデータを代入している為に @hoges
と複数形な事に注意)
#_hoge.html.erb
<%= hoge.name %>
<%= hoge.title %>
<%= hoge.boby %>
この部分テンプレートを下記のビューファイルに呼び出します。
#viewファイル
<% @hoge.each do |hoge| %>
<%= render partial: 'hoge', hoge: hoge %>
<% end %>
上記のコードは @hoges
の要素の分だけ部分テンプレートが繰り返し呼び出して表示されます。
この3行のコードを1行で書けるのが
collectionオプション
です。
collectionオプションの省略しない記述
#viewファイル
<%= render partial: 'hoge', collection: @hoges %>
1行で書いていますが同じ動きをします。
こちらもパーシャルにはローカル変数を定義し、 renderメソッド
の中でインスタンス変数 @hoge
を定義する事で、この他のviewファイルでも使用可能な仕様になっています。
省略した記述
#viewファイル
<%= render partial: 'hoge', collection: @hoges %>
ここから三つの条件全てを満たしていると、かなり省略して記述できます。
- 呼び出す部分テンプレートがviewsフォルダ内にある
hogesフォルダ
に存在する - 部分テンプレート名が
_hoge.html.erb
である - 部分テンプレート内で使う変数が
hoge
である
#viewファイル
<%= render @hoges %>
え?これでいいの?ってなりましたよね。いいのです。やりすぎな程の省略なので省略していない方をまずは覚えましょう!
最後に
読んで頂いた方、ありがとうございました。