【问题标题】:How can I save line_items from a shopping cart only in session?如何仅在会话中保存购物车中的 line_items?
【发布时间】:2013-09-03 16:54:06
【问题描述】:

我是ruby on rails的新手,我正在制作一个购物车,不需要登录即可将产品添加到购物车,也无需登录即可购买购物车中的产品,出于这个原因,我不必将购物车保存在数据库中,我需要将购物车保存在会话中,一个购物车有很多 line_item 并且每个 line_item 都有一个产品,另一种情况是用户登录时,在这种情况下,我必须将购物车存储在数据库中,这部分正在工作,但我需要将带有许多 line_items 的购物车添加到会话中,因为用户已注销,我搜索但找不到任何有用的东西,我感谢任何帮助,任何想法,任何链接来解决我的问题。谢谢

对不起,我的英语不是我的母语

【问题讨论】:

    标签: ruby-on-rails ruby session session-variables shopping-cart


    【解决方案1】:

    Rails 使您能够在会话哈希中存储信息。我建议在会话哈希中添加一个键来存储一系列行项目。我会在您的控制器或应用程序控制器中放入类似的内容,例如:

    class ApplicationController < ActionController::Base
      before_filter :build_temporary_cart
    
      def build_temporary_cart
        # This assumes that you check for logged in user using current_user
        session[:temporary_shopping_cart] = [] unless current_user
      end
    end
    

    当您的访客用户点击添加到购物车时,您可以在您的订单项控制器或您用于将商品添加到购物车的任何控制器中执行类似的操作:

    session[:temporary_shopping_cart] << @line_item
    

    查看http://guides.rubyonrails.org/action_controller_overview.html#accessing-the-session,了解有关访问会话哈希的更多信息。

    【讨论】:

    • 谢谢尼尔森,这个信息真的很有用,但是怎么看 current_user,我有一个 current_user 方法,但这需要一个数据库表来制作 User.find(session[:user]) 并恢复 current_user,如何在没有数据库的情况下获取 current_cart 或者我需要数据库中的会话表?谢谢
    • 所以如果使用session保存购物车,就不需要数据库或者session表了。会话将作为 cookie 存储在用户的计算机上。这就是为什么这个过滤器依赖于不存在的 current_user。如果用户要注册,我会在用户模型上创建一个 after_filter,这将创建一个新的 shopping_cart 从用户的会话中获取它。
    【解决方案2】:

    我认为更好的方法是仅在会话中存储 cart_id 。然后您的所有项目都存储在数据库中(与登录用户相同) 你可以这样做:

    def current_cart
      Cart.find(session[:cart_id]
      Rescue ActiveRecord::RecordNotFound
      cart = Cart.create
      session[:cart_id] = cart.id
    end 
    

    您必须创建具有多个 line_items 的 Cart 模型并添加依赖项以销毁

    has_many :line_items , :dependent => :destroy 
    

    在您的用户完成购买后,您可以销毁包含所有 line_items 的购物车项目。

    【讨论】:

      猜你喜欢
      • 2015-02-04
      • 1970-01-01
      • 2012-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-30
      • 1970-01-01
      相关资源
      最近更新 更多