renderメソッド オプション

コレクションオプション

一覧表示をする際などに、eachを使用するところを、コレクションオプションを使うことでパフォーマンスを上げることができる

eachを使った場合

コントローラー
def index
  @users = User.all
end
ビュー
<% @users.each do |user| %>
  <tr>
    <td><%= user.name %></td>
    <td><%= user.email %></td>
  </tr>
<% end %>

コレクションを使った場合

ビュー
<%= render partial: "user", collection: @users  %>
部分パーシャル
<tr>
    <td><%= user.name %></td>
    <td><%= user.email %></td>
  </tr>

ローカルオプション

<%= render partial: 'product_body', locals: { product: @product } %>

省略形
<%= render 'product_body', product: @product %>

localオプションを使うことで、インスタンス変数をローカル変数にしてパーシャルに渡すことができる

パーシャルにインスタンス変数を渡さないほうがいい理由

パーシャルは呼び出し元のテンプレートとだけ紐付けしたほうがいいから

インスタンス変数を使うと、コントローラーとも結びつき再利用性が低くなってしまう

controller側でインスタンス変数の名前や挙動を変更したとき、partial側も変更しなければならなくなる。

特定のモデルのデータと関連づけられてしまうので、フレキシブルに使うことができない。