見出し画像

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オプションがないと、どうして繰り返し表示されるのかわからないですよね。

またこちらのほうがパフォーマンスも上がります。部分テンプレートを呼び出す回数が一度で済むからです。

最後に

読んでくださったくださった、ありがとうございます。

参考文献

大変助かりました。


この記事が気に入ったらサポートをしてみませんか?