我正在从头开始在ruby上建立一个电子商务网站。(这是我在轨道上的第一个Ruby项目)
我的产品属于子类别,而子类别又属于某个类别。
我的过滤器部分包括多个复选框,用于类别,子类别,additional_category(如手工制作的衣服,工厂建造等),生活方式(放松,公司等)和cloth_material_type(此处有 30个选项)
我将每个案例的 5个数组发送到后端以搜索关联。
现在,当未登录的用户重新加载页面时,用户设置的过滤器会重置为默认值。
为了避免这种情况,我有四个选择。
选项1 。将用户设置的过滤器值存储在快速的 Cookie 中。但这可能会降低用户浏览器的速度。
选项2 。使用 ActiveRecord :: SessionStore gem将值存储在会话中,这会将我的会话大小增加到65K,但会降低应用程序的速度。
选项3 。使用jquery 修改/创建document.url 选项,以便每个过滤器选项都附加到document.url并在重新加载时获取参数设置用户进行过滤。但这看起来非常麻烦。
选项4 。使用像 rails临时数据库等
的宝石我选择使用选项2并使用会话存储,但我认为将来维护它会变得很麻烦。
只需要一些建议,比如其他rails电子商务网站为解决这个问题做了什么,或者有更好的方法来解决这个问题。
答案 0 :(得分:0)
<强> Redis的强>
我要做的是添加一层抽象;具体而言,我认为您可以使用Redis
或类似的临时数据库(正如您在问题中提到的那样)。
Redis是一个key:value
数据库,它基本上存储了JSON值,供您在应用中使用。如果将其绑定到模型,您将能够存储临时值而不会妨碍应用程序的性能。
我认为您可以设置Redis来存储来宾ID,以及您的值数组:
[guest_user_id] => [
1 => "x"
2 => "y"
3 => ["z", "a", "b"]
]
初始化guest_user_id
系统时,您可以生成Redis
,并将其存储在用户的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
我可以进一步详细说明,但由于你只是在寻找建议,这就是我现在要推荐的内容