[英]Too many pages using kaminari gem in Ruby on Rails 3.1 application
[英]Too many sessions in a rails application
我正在从头开始在Rails on Rails上构建一个电子商务网站(这是我的第一个Rails on Rails项目)。
我的产品属于一个子类别,而该子类别又属于一个类别。
我的过滤器部分包含用于类别,子类别,additional_category(如手工衣服,工厂建造等),生活方式(放松,企业等)和cloth_material_type(具有大约30个选项 )的多个复选框
我将每种情况的5个数组发送到后端,以搜索关联。
现在,当非登录用户重新加载页面时,由用户设置的过滤器将重置为默认值 。
为避免这种情况,我想到了四个选择。
选项1 。 将用户设置的过滤器值快速存储在cookie中 ,但这可能会降低用户浏览器的速度。
选项2 。 使用ActiveRecord :: SessionStore gem将值存储在会话中,这对于我来说会将会话大小增加到65K,但会使应用程序变慢。
选项3。使用jquery 修改/创建document.url选项,以便将每个过滤器选项附加到document.url上,并在重新加载时获得用户设置的用于过滤的参数,但这实现起来非常麻烦。
选项4 。 使用宝石,例如Rails临时数据库等。
我选择了选项2并为此目的使用了会话存储,但是我认为将来要维护它会变得很麻烦。
只是需要一些建议,例如其他Rails电子商务网站可以解决此问题,或者有什么更好的方法可以解决此问题。
Redis的
我要做的是添加一层抽象; 具体来说,我认为您将从Redis
或类似的临时db中受益(如您在问题中所提到的)。
Redis是一个key:value
数据库,它基本上存储JSON值供您在应用程序中使用。 如果将其绑定到模型,则可以存储临时值而不会影响应用程序的性能。
我认为您可以将Redis设置为存储来宾ID,以及一个来自其中的值数组:
[guest_user_id] => [
1 => "x"
2 => "y"
3 => ["z", "a", "b"]
]
初始化Redis
系统时,您将能够生成guest_user_id
并将其存储在用户的session
。 这样,您只在用户的浏览器中存储了最少的数据,并且可以使用Redis
数据填充各种控制器操作:
#config/routes.rb
resources :categories do
resources :subcategories
end
#app/models/user.rb
Class User < ActiveRecord::Base
def self.new_data
# create guest_id and send to Redis
end
end
如果未注册用户,这将允许您使用guest_id
填充会话:
#app/controllers/products_controller.rb
class ProductsController < ApplicationController
def show
@user = user_signed_in? ? current_user : User.new_data
#You'll then be able to populate their Redis values with the data from the product selection etc
end
end
我可以介绍更多具体信息,但是由于您只是在寻找建议,因此,这是我目前要推荐的
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.