Rails-当一个商品中有多个商品时,将其从购物车中移除

时间:2018-10-08 20:23:45

标签: ruby-on-rails

我正在研究《用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 %> &times; </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?' } %>

1 个答案:

答案 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