如何在RoR中将数据从会话存储到数据库?

时间:2010-01-04 14:00:21

标签: ruby-on-rails ruby e-commerce

我有一个购物车,其中包含许多购物车商品和价格或订单。它记住用户在购物车中选择,但尚未存储到数据库中。我该怎么做才能存储这些记录。

购物车有很多购物车商品。一个购物车项目包含产品数量和产品对象。

2 个答案:

答案 0 :(得分:1)

您应该尽可能减少Cookie,因为:

  1. 浏览器需要在每次请求时向您的服务器发送cookie(大cookie =较慢的站点)。
  2. Cookie有(实用/近似)4 KB大小限制。
  3. 因此,最佳设计是仅在会话中存储相关对象的ID。在您的情况下,您应该只需要购物车ID和用户ID。为所有内容创建数据库支持的ActiveRecord模型(如果您还没有它们),并在过滤器之前使用控制器在每个请求上加载当前对象,如下所示:

    class ApplicationController < ActionController::Base
      before_filter :load_current_user
    
      private
      def load_current_user
        @current_user = User.find_by_id(session[:user_id])
      end
    end
    

答案 1 :(得分:1)

我不建议这样做,但你仍然可以用

config.action_controller.session_store = :active_record_store

在config / environment.yaml

然后将对象存储在会话中:

# Note:
# do whatever u want but make sure you save the objects before you store them in the session object.
session[:cart] = @cart
# or you can modify them but don't forget to save the object.
session[:cart].something = 'blabla'
session[:cart].save