Rails:如何使用多个控制器访问会话变量?

时间:2009-07-12 11:48:29

标签: ruby-on-rails ruby controller session-variables

我遇到使用会话变量的问题。我有两个名为'graduate_students_controller'和'current_students_controller'的控制器。每个控制器控制不同的视图文件。我正在使用这些控制器的会话变量来存储会话信息。

这是问题所在。假设我有两个视图文件'reports / current_students_list','reports / graduate_students_list',每个都由上述控制器分别控制。

现在,如果我尝试在同一个浏览器中打开这两个网页并尝试同时使用它们,我会从首次加载的页面中收到“nil object access”错误。 'nil对象'指的是第一个页面应该访问的会话变量。但是,当我单独使用这两个Web应用程序中的任何一个时,它们都能正常工作。

所以在我看来,第一次加载的网络应用程序的会话变量。被第二次加载的网络应用程序覆盖。也许是因为第二页在第一页上存储了一个新的cookie?

我该如何解决这个问题?

非常感谢任何建议。

进一步澄清:两个控制器属于同一个Rails应用程序。我没有在两个控制器中使用相同的会话变量名称。所以我不明白他们为什么会被覆盖

我是rails的新手,我真的很感激这个问题的一些帮助。感谢。

1 个答案:

答案 0 :(得分:4)

我不确定您是在运行两个应用程序,还是指同一应用程序下的两个控制器。如果您正在查看不同的Web应用程序,那么我认为您在每个应用程序的环境中使用相同的名称和会话密钥。尝试更改environment.rb中的键值:

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

如果您在同一个应用程序中使用来自两个不同控制器的相同会话变量,那么您需要编写代码以适应这一点,但我不建议这样做。访问会话数据时,请检查nil值:

session[:some_key].nil?

并确保公共代码(即在application_controller.rb中)不会覆盖您的值。