Rails - хранить уникальные данные для каждой открытой вкладки / окна - PullRequest
4 голосов
/ 27 сентября 2011

У меня есть приложение, которое имеет разные наборы данных в зависимости от того, какую компанию выбрал пользователь в данный момент (раскрывающийся список на боковой панели, используемой в настоящее время для установки переменной сеанса).

Мой клиент выразил желание иметь возможность работать с несколькими различными наборами данных из одного браузера одновременно. Следовательно, сессии больше не сокращают это.

Похоже, поиск в Google подразумевает получение или публикацию данных вместе с каждым запросом, и это было мое первое предположение. Есть ли лучший / легкий / рельсовый путь для достижения этой цели?

Ответы [ 2 ]

5 голосов
/ 27 сентября 2011

У вас есть несколько вариантов здесь, но, как вы указали, система session не будет работать для вас, поскольку она глобальна для всех экземпляров одного и того же браузера.

Стандартный подход заключается вдобавить что-то к URL, который идентифицирует контекст для выполнения.Это может быть просто префикс, такой как /companyx/users вместо /users, где вы выбираете слаг компании и используете его в качестве области действия.Как правило, вы делаете это, имея базовый класс контроллера, который выполняет эту работу за вас, а затем наследует его от всех остальных контроллеров, которые будут затронуты таким же образом.

Другой подход заключается в удалении идентифицирующего компонента компании изURL к имени хоста.Это распространено среди поставщиков программного обеспечения как услуги, потому что это значительно упрощает защиту вашего приложения.Вместо myapp.com/companyx/users у вас будет companyx.myapp.com/users.Преимущество этого заключается в сохранении существующей структуры URL, а когда у вас есть большие объемы данных, вы можете разделить ваше приложение по клиенту на разные базы данных без большой головной боли.

Ответ, который вы нашли с пометкой всехURL-адреса, использующие токен GET или поле POST, не будут работать очень хорошо.Во-первых, это грязно, а во-вторых, сайт с каждой ссылкой, являющейся POST, очень раздражает в работе, так как делает навигацию с помощью кнопки «назад» или принудительную перезагрузку проблематичной.Причина, по которой он нашел применение, заключается в том, что из коробки и PHP не существует маршрутов поддержки, поэтому людям приходилось обходиться.

1 голос
/ 27 сентября 2011

Вы можете создать временную таблицу базы данных или использовать базу данных ключ-значение и хранить в ней все необходимые данные.Ключ uniq может использоваться как идентификатор окна.Кроме того, вы должны добавить этот идентификатор окна для каждой ссылки.Таким образом, вы можете получить соответствующие данные для каждой вкладки браузера из базы данных и сохранить их в сеансе, объекте, ...

Если у вас есть объект, например, @data, вы можете сохранить его вбазы данных с помощью Marshal.dump и вернуть его с помощью Marshal.load.

...