【发布时间】:2012-04-29 20:18:57
【问题描述】:
我在 Sinatra 中为 redirect_to_next 编写了一个快速助手,我在其中重定向到 session[:next] 提供的路径(如果存在或默认路径)。
在 Sinatra 中,session 真正由 Rack 提供,而 spec 据说为 fetch 提供了类似哈希的接口。我写了以下错误助手来解释我的问题。
error 401 do
session[:next] = request.path
puts "get #{session[:next]}"
puts "fetch #{session.fetch(:next, '/')}"
redirect "/login"
end
当我在未登录的情况下尝试访问 /settings 时,我 halt 401 运行上述代码。这是它打印到我的终端的内容:
get /settings
fetch /
:next 作为键存在,为什么它给我默认值,好像它没有一样?
更新
这个最小的例子显示了相同的行为。
require 'sinatra'
set :sessions, true
get '/' do
session[:testing] = "hello"
puts "get #{session[:testing]}"
puts "fetch #{session.fetch(:testing, 'goodbye')}"
end
日志
[2012-04-29 14:11:51] INFO WEBrick::HTTPServer#start: pid=1954 port=9292
get hello
fetch goodbye
10.0.2.2 - - [29/Apr/2012 14:11:54] "GET / HTTP/1.1" 200 - 0.0485
软件
- 红宝石 (1.9.3p194)
- 机架 (1.4.1)
- 西纳特拉 (1.3.2)
【问题讨论】:
-
我无法在此处重现该问题。您是否可以提供一个显示此行为的最小但完整的示例?