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側も変更しなければならなくなる。
特定のモデルのデータと関連づけられてしまうので、フレキシブルに使うことができない。