我希望有人可以提供帮助。我怀疑这是一个令人尴尬的新手问题,但是,我很尴尬。我已经到处尝试过我能想到的答案,并尝试了我能想到的每一种排列。
任务: 我正在研究一个管理在线购物车的Ruby教程中的示例。任务是在购物车中显示的每个项目旁边创建一个按钮,使您可以将单个项目的数量减少1.
问题: 当我在视图中单击数量为1的项目旁边的“递减”按钮时,它会按预期从购物车中消失。但是,当我点击数量超过一个项目旁边的按钮时,没有任何反应。
代码
查看:
<td><%= button_to("Decrement", decrement_line_item_path(line_item), method: :post ) %>
</td>
(我在routes.rb中设置了一个成员路由,以便它访问“POST”上的减量操作)
控制器:
def decrement
@cart = set_cart
@line_item = @cart.line_items.find_by(params[:id])
@line_item = @cart.decrement_line_item_quantity(@line_item.id)
respond_to do |format|
format.html {redirect_to store_url}
end
end
(关注文件中有一个set_cart方法,只根据会话获取或设置购物车,我知道这样做有效)。
型号:
def decrement_line_item_quantity(item_id)
item_to_decrement = line_items.find_by(id: item_id)
if item_to_decrement.quantity > 1
item_to_decrement.quantity -= 1
else
item_to_decrement.destroy
end
item_to_decrement
end
我的调试器说:
但实际购物车中订单项数量的值在控制器方法中似乎没有变化。我从模型方法返回后检查调试器中的@ cart.line_items.find_by(params [:id])。数量,并且没有改变。
这意味着当我以后再来看我的购物车时,具有多个单位的商品的数量不会减少,所以没有任何反应。
有人能告诉我我错过了什么吗?这是我第一次使用Stack Overflow,所以我还在学习。已经阅读了指南,我希望我能够正确地遵循它们。对任何违规行为表示歉意,并提前感谢。
答案 0 :(得分:1)
您必须在减少数量后保存记录,否则数量的变化将不会持久保存到数据库中:
def decrement_line_item_quantity(item_id)
item_to_decrement = line_items.find_by(id: item_id)
if item_to_decrement.quantity > 1
item_to_decrement.quantity -= 1
item_to_decrement.save
else
item_to_decrement.destroy
end
item_to_decrement
end