アプリで 3 つの異なる方法でレンダリングしたいカートがあります。
- サイドバーで。カート内の商品数とその合計金額のみを表示します。
- カートのメイン ビュー。各項目の商品、数量、合計金額へのリンクを含む項目を表示します。また、アイテムの数量を増減するボタンと、カートからアイテムを削除するボタンも表示されます。
- 注文ビューでは、商品へのリンク、数量を変更するボタン、および「削除」ボタンを除いて、メインのカート ビューと同じ方法でカートの内容を表示します。
これまでのところ、カートを次のようにレンダリングします。
carts/_cart.html.erb
<%= yield %>
カートサイドバーのレイアウトcarts/_sidebar.html.erb
<ul>
<li class="nav-header">Your Cart (<%= pluralize(@cart.total_items, "Item") %>)</li>
<li>Total Due: <%= number_to_euro(@cart.total_price) %></li>
<% unless @cart.line_items.empty? %>
<li><%= link_to "View Cart & Checkout", cart_path(@cart) %></li>
<li><%= link_to "Empty Cart", @cart, :method => :delete %></li>
<% end %>
</ul>
layouts/_sidebar.html.erb
によってレンダリングされるもの<%= render :partial => 'carts/cart', :layout => 'carts/sidebar' %>
カートのメイン レイアウトcarts/_main.html.erb
<table>
<tr>
<th>Product</th>
<th>Quantity</th>
<th>Price</th>
<th>Subtotal</th>
<th></th>
</tr>
<%= render @line_items %>
<tr id="total_line">
<td colspan="3">Total:</td>
<td><%= number_to_euro(@cart.total_price) %></td>
<td></td>
</tr>
</table>
からレンダリングされますcarts/show.html.erb
<h1><%= pluralize(@cart.total_items, "Item") %> in Your Cart</h1>
<%= render :partial => 'cart/cart', :layout => 'carts/main' %>
<%= link_to "Empty Cart", @cart, :method => :delete %>
<%= link_to "Checkout", new_order_path %>
また、現在カートのメイン ビューと同じ方法でcarts/_order.html.erb
レンダリングされているものもあります。orders/new.html.erb
私がやりたいのは、 と からラインアイテムをレンダリングするための 2 つの異なるレイアウトを作成することcarts/show.html.erb
ですorders/new.html.erb
。そしてそうするために、私は持ってい<%= yield %>
ますline_items/_line_item.html.erb
カートのメイン レイアウトの品目レイアウトline_items/_main.html.erb
<tr>
<td><%= link_to "#{line_item.product.brand.name} #{line_item.product.title}", product_path(line_item.product) %></td>
<td>
<%= link_to "-", decrement_line_item_path(line_item), :method => :post %>
<%= line_item.quantity %>
<%= link_to "+", increment_line_item_path(line_item), :method => :post %>
</td>
<td><%= number_to_euro(line_item.product.price) %></td>
<td><%= number_to_euro(line_item.total_price) %></td>
<td><%= link_to "Remove"), line_item, :method => :delete %></td>
</tr>
新しい注文ビューの同様の広告申込情報レイアウトline_items/_order.html.erb
<tr>
<td><%= "#{line_item.product.brand.name} #{line_item.product.title}" %></td>
<td><%= line_item.quantity %></td>
<td><%= number_to_euro(line_item.product.price) %></td>
<td><%= number_to_euro(line_item.total_price) %></td>
</tr>
ここから問題が始まります。コレクションをレンダリングする方法がわかりません。carts/_main.html.erb
こんな感じでラインアイテムをレンダリングしてみました
<%= render :partial => 'line_items/line_item', :layout => 'line_items/main', :collection => @line_items %>
そしてcarts/_order.html.erb
こんなところから
<%= render :partial => 'line_items/line_item', :layout => 'line_items/order', :collection => @line_items %>
しかし、私は Carts#show で LocalJumpError を取得します
Showing app/views/line_items/_line_item.html.erb where line #1 raised:
no block given (yield)
その他の :collection 名は何も表示しません。私は何を間違っていますか?