如何在狂欢中获得购物车订单项?

How to get cart line items in spree?

我需要帮助来获取添加到购物车中的所有项目。 我实际上显示了添加到购物车中的每种产品的数量。 我试过 current_order 但它表现得很奇怪,有时它是正确的但有时即使购物车是空的它也会在 current_order 中显示产品所以如果购物车更新它就会中断。 你们能给我推荐一种直接获取购物车商品的方法吗?

已更新

在视图中

<% count = count_in_cart(simple_current_order, product) %>
<span class="badge badge-notify rounded-bottom"><%=count%></span>

在应用程序助手中

def count_in_cart(current_order, product)
  return 0 unless current_order
  product = current_order.line_items.select{|item| item.variant_id ==product.id}.last
  product.present? ? product.quantity : 0
end

它在本地就像一个魅力,但在 heroku 上它不显示计数。 有人可以指导我做错了什么吗?

Spree 版本为 3.7.2

问题出在您的 count_in_cart 函数上。您编写的函数获取最后一个 line_item 的数量,但您实际想要的是计算每个产品。

def count_in_cart(current_order, product)
  current_order.where(product: product).to_a.sum(&:quantity)
end

看起来这些东西在视图文件中表现得很奇怪,因为可能是内存中存储了对象。

我设法通过创建一个新的 API 并在该控制器中计算乘积来修复它。

@cart_items_order = simple_current_order if simple_current_order.present?
render json: @cart_items_order&.line_items

真是太棒了。

对于以后寻找这个东西的任何人。

谢谢。