我正在研究《用Rails进行敏捷Web开发》一书,而我被困在其中一项补充练习中。目标是从购物车中删除商品,虽然我可以对单个商品进行此操作,但是当一个商品中有多个商品时,当前会清除所有商品。我希望“删除项目”按钮仅删除多个项目之一。
购物车当前如下所示:
项目1 |数量:1
项目2 |数量:3
因此,当我单击项目2上的“删除项目”按钮时,它当前会删除所有三个项目,而不仅仅是一个。我试图通过减小项目的数量属性(如果大于)来实现此目的,而不是删除它,但是当前它什么都不做。如果数量为1,它仍然会删除它。我在这里做错了什么?
来自line_items_controller.rb
def destroy
@cart = @line_item.cart
if @line_item.quantity > 1
@line_item.quantity-=1
else
@line_item.destroy
end
respond_to do |format|
format.html { redirect_to @cart }
format.json { head :no_content }
end
end
cart.show.erb
<p id="notice"><%= notice %></p>
<h2>Your Cart</h2>
<table>
<% @cart.line_items.each do |item| %>
<tr>
<td><%= item.quantity %> × </td>
<td><%= item.product.title %></td>
<td class="item_price"><%= number_to_currency(item.total_price) %></td>
<td><%= button_to "Remove Item", item, method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
<tr class="total_line">
<td colspan="2">Total</td>
<td colspan="total_cell"><%= number_to_currency(@cart.total_price) %></td>
</tr>
</table>
<%= button_to "Empty Cart", @cart, method: :delete, data: { confirm: 'Are You Sure?' } %>
答案 0 :(得分:1)
您的代码未将数量更改提交到数据库。您需要添加以下内容:
@line_item.save
因此,您的代码将如下所示:
def destroy
@cart = @line_item.cart
if @line_item.quantity > 1
@line_item.quantity-=1
@line_item.save
else
@line_item.destroy
end
respond_to do |format|
format.html { redirect_to @cart }
format.json { head :no_content }
end
end