如果用户更新了商品的数量,我想保存购物车(这样我就可以重定向到它)并销毁该订单项。我还想检查以确保该项目的库存足够,如果他们要增加数量。所以我的更新函数看起来像这样(相信响应函数可以工作,就像它们看起来那样。它将代码减少了一半,因此更容易查看):
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,然后如果你尝试从删除它更新它。我认为这意味着它无法告诉get_inventory_check方法中的line_item已更新,但在if语句中使用params也不起作用。
答案 0 :(得分:4)
params[:item][:qty]
很可能是String
,因此@line_item_new_qty == 0
将返回false
。解决此问题的一种方法是将@line_item_new_qty
转换为整数:
if @line_item_new_qty.to_i == 0
或者你可以将它与"0"
进行比较,但一般来说,问题可能是比较不同的类型。