renderメソッドのlocalsオプションとcollectionオプション【Day 11/30 2nd】
こんにちは、たわらです。
本記事はrenderメソッドのlocalsオプションとcollectionオプションの情報を整理します。
localsオプションで部分テンプレート内で利用する変数を定義
renderメソッドにlocalsオプションを付けると、その部分テンプレートで使用する変数を定義することができます。
例えば、こんな感じです。
index.html.rb
<%= render partial: 'form', locals: { board: @board } %>
次のように省略できる
<%= render 'form', { board: @board } %>
こうすると、_form.html.erbの部分パーシャルのなかで、boardのなかに@boardを格納できます。
新規登録と編集画面を同じフォーム画面を作るときなど、こんな形で利用できます。
collectionオプション
同じような要素を繰り返して表示する必要があるときは、collectionオプションを使います。
例えば、こんな感じのコードがあったとします。@boardの要素をそれぞれboardというローカル変数に格納しています。
<% @board.each do |board| %>
<%= board.title %>
<%= board.body %>
<% end %>
まず、ブロック内を部分パーシャルにします。
<% @board.each do |board| %>
<%= render partial: 'form', board: board %>
<% end %>
これは、@boardの数だけ部分テンプレートを呼び出すので、次のように短く記述できます。collectionオプションをつけると、指定した変数の要素の数だけ部分テンプレートが表示されます。
<%= render partial: 'form', collection: @board %>
次のように省略できる
<%= render 'form', @board %>
これで、よく見る形まで来ることができました。collectionオプションがないと、どうして繰り返し表示されるのかわからないですよね。
またこちらのほうがパフォーマンスも上がります。部分テンプレートを呼び出す回数が一度で済むからです。
最後に
読んでくださったくださった、ありがとうございます。
参考文献
大変助かりました。
この記事が気に入ったらサポートをしてみませんか?