Rails: Как вы можете получить доступ к переменным сеанса, используя несколько контроллеров? - PullRequest
6 голосов
/ 12 июля 2009

У меня проблема с использованием переменных сеанса. У меня есть два контроллера с именами «Graduate_students_controller» и «Current_students_controller». Каждый из этих контроллеров управляет различными файлами просмотра. Я использую переменные сеанса с обоими этими контроллерами для хранения информации сеанса.

Вот проблема. Допустим, у меня есть два файла представления «reports / current_students_list», «reports /graate_students_list», каждый из которых контролируется отдельно упомянутыми контроллерами.

Теперь, если я попытаюсь открыть эти две веб-страницы из одного и того же браузера и попытаться работать с ними одновременно, я получаю ошибку 'nil object access' с первой загруженной страницы. «Объект nil» относится к переменной сеанса, к которой должна обращаться первая страница. Однако когда я использую любое из этих двух веб-приложений по отдельности, они работают нормально.

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

Как мне это исправить?

Любое предложение очень ценится.

Чтобы уточнить немного: два контроллера принадлежат одному и тому же приложению Rails. И я не использую идентичные имена переменных сеанса в обоих контроллерах. Поэтому я не понимаю, почему они могут быть перезаписаны

Я новичок в рельсах и буду очень признателен за помощь в решении этой проблемы. Спасибо.

1 Ответ

4 голосов
/ 13 июля 2009

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

config.action_controller.session = { :key => "_myapp_session", :secret => "..." }

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

session[:some_key].nil?

и убедитесь, что общий код (то есть в application_controller.rb) не перезаписывает ваши значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...