我正在开发一个将使用shoppe gem作为电子商务引擎的网站,而我在向现有订单添加或删除项目时遇到问题。用户应该能够查看他们的订单,然后在每个订单项旁边,会有一个加号和一个减号。单击时,加号应在订单中添加一个相同类型的项目,同样,减号应在单击时删除项目。我有以下代码的两个链接:
link_to "+", adjust_order_item_quantity_path(item.id), :method => :post
link_to "-", adjust_order_item_quantity_path(item.id), :method => :delete
我的路线看起来像这样:
post 'orders/change_item_quantity/:order_item_id', to: 'orders#change_item_quantity', :as => 'adjust_order_item_quantity'
delete 'orders/change_item_quantity/:order_item_id', to: 'orders#change_item_quantity'
我的订单控制器的代码是:
def change_item_quantity
item = current_order.order_items.find(params[:order_item_id])
request.delete? ? item.decrease! : item.increase!
if item.quantity == 0
redirect_to "#", :notice => "#"
else
redirect_to request.referer
end
rescue Shoppe::Errors::NotEnoughStock => e
respond_to do |wants|
wants.html { redirect_to request.referer }
end
end
这些代码大部分都是在专柜教程网站上给出的示例代码,但我无法让它正常工作。当我点击' +'时,我收到一条错误消息:
Couldn't find Shoppe::OrderItem with 'id'=[nil] [WHERE `shoppe_order_items`.`order_id` = ?]
当我点击' - '时,会删除一个项目,但是当我点击' - '时,我会收到与上面相同的错误消息。当只剩下一个项目时。我真的很感激你的帮助!
提前致谢!
修改
这是我的应用程序跟踪:
1 def change_item_quantity
2 item = current_order.order_items.find(params[:order_item_id])
3 request.delete? ? item.decrease! : item.increase!
4 if item.quantity == 0
5 redirect_to root_path
问题在于这一行:
item = current_order.order_items.find(params[:order_item_id])
答案 0 :(得分:0)
看起来你的order_item_id参数在某些时候会丢失。一般来说你应该 包含问题的完整错误跟踪,因为它会告诉您哪行代码 导致错误。
虽然有一些阅读错误的经验,但我可以告诉你
Couldn't find <ModelName>
错误通常是由使用标识错误的find
引起的。
所以以下几行是失败的:
item = current_order.order_items.find(params[:order_item_id])
您的观看代码对我来说很好,而且我不确定您需要更改为
修复此错误。我要做的是在change_item_quantity
的开头设置一个断点
方法并确保已设置params[:order_item_id]
。如果不是,那很可能
您的视图代码(link_to)存在问题。
也许item.id
在您的链接中为零。检查您的HTML并确保ERB已进入
ID正确。