2015-10-10 4 views
1

Я строю электронной коммерции сайт на рубин на рельсах с нуля. (Это мой первый проект на рубин на рельсах)Слишком много сеансов в приложении рельсы

Мой продукт относится к подкатегории, которые в -отвержение относится к категории.

Мои фильтры частичными включают несколько флажки для категории, подкатегории, additional_category (как ручной работы одежда, построен завод и др.), Образ жизни (расслаблены, корпоративные и т.д.) и cloth_material_type (это имеет около 30 вариантов)

Я отправляю 5 массивов для каждого из этих случаев на бэкэнд для поиска по ассоциациям.

Теперь, когда пользователь, не зарегистрированный пользователем, перезагружает страницу, фильтры, установленные пользователем, сбрасываются по умолчанию.

Чтобы избежать этого, у меня есть четыре варианта.

Вариант 1. Сохраните значения фильтра, установленные пользователем в cookie , который быстро. Но это может замедлить работу браузера пользователя.

Вариант 2. Сохраните значения в сеансе, используя ActiveRecord :: SessionStore gem, который увеличит размер сеанса для меня до 65K, но замедлит приложение.

Вариант 3 .Using JQuery изменить/создать document.URL параметры так, что каждый вариант фильтра добавляемый к document.URL и перезагрузки я получаю параметры, установленные пользователем для filtering.But это выглядит очень громоздко реализовать.

Вариант 4. Использование драгоценных камней, таких как rails временная база данных и т. Д.

Я выбрал вариант 2 и использовал для этого сессионный магазин, но я думаю, что это будет громоздким, чтобы сохранить это в будущем.

Просто нужно несколько советов, как сделать другие сайты электронной торговли, чтобы решить эту проблему, или есть лучший способ решить эту проблему.

+0

Я хотел бы использовать параметры URL синка Один из принципов спокойного дизайна заключается в том, что ресурс должен выглядеть одинаково независимо от состояния браузера. Так что, если я смотрю на розовые женские туфли и скопирую пасту URL-адреса браузера и отправляю их другу, они должны увидеть тот же выбор. – max

+0

Вы можете, конечно, использовать это вместе с учетными записями cookie/guest для запоминания избранных. Но построение URL-ориентированного решения обычно оказывается более надежным из-за безгражданства. – max

+0

Спасибо за ваш ответ. Н точно, что меня беспокоит. В дополнение к этим массивам у меня есть диапазон цен и специальные варианты строчек. Я планирую создать модель поиска для временных данных. Так что пользователь может легко сохранить их, если они захотят и поделиться своими сохраненными поисками. И добавление cronjob в задачу rake для удаления устаревших кортежей в модели поиска и модели сеанса. –

ответ

0

Redis

То, что я хотел бы сделать, это добавить слой абстракции; в частности, я думаю, вам полезно использовать Redis или аналогичный временный db (как вы упомянули в своем вопросе).

Redis - это база данных key:value, которая в основном хранит значения JSON для использования в вашем приложении. Если вы привяжете его к модели, вы сможете хранить временные значения, не мешая производительности вашего приложения.

Я думаю, вы могли бы настройки Redis хранить гостевой идентификатор, и массив из значений от:

[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 

я мог бы пойти в более конкретику, но, как вы ищете только для предложений, это то, что я должен рекомендовать на данный момент

+0

Большое спасибо за ценное предложение. Я нашел другой способ - использование локального хранилища HTML5, с помощью которого вы можете сэкономить около 5 МБ данных на стороне клиента. (Единственным недостатком является то, что многие пользователи будут работать с устаревшими браузерами). как решение, добавление слоя абстракции наверняка будет полезно во многих отношениях :) –

Смежные вопросы