【问题标题】:How to store and use multiple cart_ids in a session如何在会话中存储和使用多个 cart_id
【发布时间】:2021-02-01 22:03:59
【问题描述】:

我希望有人能指出我正确的方向,因为我已经在这个问题上绞尽脑汁了几天????

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

我发现下面的 sn-p 完全可以工作。然而,当尝试升级 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

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

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

提前多谢了????

【问题讨论】:

    标签: ruby-on-rails ruby activerecord ruby-on-rails-6


    【解决方案1】:

    我可能会走上拥有 ParentCart 或 MetaCart 的路线,或者任何你想称呼的东西,每个商店的所有购物车都属于。让我们以UberCart 为例。

    因此,您的 set_cart 方法会查找或创建 UberCart 记录,这与您当前对普通 Cart 的记录完全相同。

    接下来,对于每个商店,无论是在您创建 UberCart 时,还是稍后在您查看商店时...由您决定,您都可以创建一个 Cart,它本质上是您的 @987654327 之间的连接表@ 和选择的Shop

    然后将来自ShopLineItems 附加到正确的Cart,可以从会话中的UberCart 访问。

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

    【讨论】:

    • 太好了,成功了。令人惊讶的是它如何简化应用程序。非常感谢!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-31
    • 2020-11-06
    • 1970-01-01
    • 1970-01-01
    • 2013-08-28
    • 1970-01-01
    相关资源
    最近更新 更多