Rails 如何在 Rails 加载后,自动设置一个 session 值?

jeky · 2015年05月15日 · 最后由 jeky 回复于 2015年05月16日 · 2073 次阅读

官方文档上有指导: “加载完框架以及程序中使用的 gem 后,Rails 会加载初始化脚本。初始化脚本是个 Ruby 文件,存储在程序的 config/initializers 文件夹中。”

所以,我在 config/initializers 中新建一个文件,如:zzz_init.rb。代码如下: session[:openid_test] = "jeky123"

但是 rails s 启动时却发生异常: /config/initializers/zzz_init.rb:1:in <top (required)>': undefined local variable or methodsession' for main:Object (NameError) from /usr/local/bin/ruby-2.1.3/lib/ruby/gems/2.1.0/gems/activesupport-4.1.6/lib/active_support/dependencies.rb:241:in `load'

文档中还有这个:“after_initialize:在程序初始化完成之后运行,即 config/initializers 文件夹中的初始化脚本运行完毕之后。” 于是,我放在 after_initialize 事件中,异常一样。

这个里面不能使用 session 对象?那应该如何访问?

application controller 啊

#1 楼 @flowerwrong 啊啊啊!!我傻了。。

#1 楼 @flowerwrong 试了一下还不行 -_-!

ActionController::RoutingError (undefined local variable or method session' for ApplicationController:Class): app/controllers/application_controller.rb:13:inclass:ApplicationController' app/controllers/application_controller.rb:2:in <top (required)>' app/controllers/test_controller.rb:2:in'

session 存在于 request=>response 这个流程中,你在 rails 启动时做没用,当然,代码都在你手里,你一定要这么做也是可以实现的。

session 只在有请求的时候才存在 在 ApplicationController 里面

before_action :default_session

def default_session
  session[:default_id] = 'x'
end

#4 楼 @hhuai #5 楼 @ch3n 明白了,多谢了!!

需要 登录 后方可回复, 如果你还没有账号请 注册新账号