0

如果用户更新了商品的数量,我想保存购物车(以便我可以重定向到它)并销毁该商品。如果他们要增加数量,我还想检查以确保该项目的库存也有足够的库存。所以我的更新函数看起来像这样(相信响应函数可以正常工作,就像它们看起来那样。它将代码削减了一半,因此更容易查看):

  def update
    @line_item = LineItem.find(params[:id])
    @line_item_new_qty = params[:item][:qty]
    unless LineItem.get_inventory_check?( @line_item.id , params[:item][:qty] )
      respond 'Insufficient Inventory'
    else
      if @line_item_new_qty == 0
        @line_item_cart = @line_item.cart
        @line_item.destroy
          respond 'Item Deleted'
      else    
        respond 'Quantity Updated'
      end
    end
  end

get_inventory_check 似乎在工作,如果有足够的,它会更改并保存 line_item 的数量,并返回 true。否则,它严格返回 false。

我已经尝试将 if == 0 语句放在每个可能的位置,我唯一可以开始工作的是如果我有@line_item.qty == 0,那么它将首先将其删除,然后将其更新为 0,然后如果您尝试从他们的删除中更新它。我认为这意味着它无法判断 line_item 已在 get_inventory_check 方法中更新,但在 if 语句中使用 params 也不起作用。

4

1 回答 1

4

很可能params[:item][:qty]是 a String,因此@line_item_new_qty == 0会返回false。一种可能解决此问题的方法是转换@line_item_new_qty为整数:

if @line_item_new_qty.to_i == 0

或者,您可以将其与 进行比较"0",但总的来说,问题可能是比较不同类型的问题之一。

于 2013-01-28T23:55:05.030 回答