如何在会话中存储和使用多个 cart_ids

How to store and use multiple cart_ids in a session

我希望任何人都能指出正确的方向,因为我已经为这个问题绞尽脑汁好几天了。

一个网站列出了多个商店,每个商店都有一个展示页面,用户可以从中 select 并将产品添加到(会话)购物车。每个商店都有对应的购物车。用户为每个购物车执行单独的结帐过程。在 carts#index 页面上,用户可以看到活动购物车的概览。

我发现下面的代码片段完全有效。然而,当尝试升级 set_cart 方法以包含多个购物车时,我自己的逻辑和想法失败了。

module CurrentCart
  private

  def set_cart
    @cart = Cart.find(session[:cart_id])
  rescue ActiveRecord::RecordNotFound
    @cart = Cart.create
    session[:cart_id] = @cart.id
  end
end

一种有效但可扩展性不强的方法是为整个网站创建一个会话购物车,然后发送一个商店实例进行过滤(即@cart.items_for_shop(@shop)。问题是购物车实例和商店实例都需要在应用程序中随处可用。为每个商店设置一个单独的 cart_id 会更有意义。

您将如何处理在会话中存储多个购物车?

非常感谢

我可能会选择拥有 ParentCart、MetaCart 或任何您想称呼每个商店的所有购物车所属的东西的路线。让我们以 UberCart 为例。

因此,您的 set_cart 方法找到或创建了一条 UberCart 记录,与您目前对普通 Cart.

完全相同

接下来,对于每家商店,在您创建 UberCart 时,或者稍后您查看商店时...由您决定,您创建一个 Cart,它本质上是在你的 UberCart 和选择的 Shop 之间加入 table。

然后 Shop 中的

LineItem 会附加到正确的 Cart,可以从会话中的 UberCart 访问它。

在您的 CartController#index 操作中,您可以使用 @uber_cart.carts 访问属于此 UberCart.

的所有购物车