【发布时间】:2016-06-17 15:15:53
【问题描述】:
我想将哈希与默认参数和请求中给出的实际参数合并。当我调用这个看似无辜的脚本时:
#!/usr/bin/env ruby
require 'sinatra'
get '/' do
defaults = { 'p1' => 'default1', 'p2' => 'default2' }
# params = request.params
params = defaults.merge(params)
params
end
curl http://localhost:4567?p0=request 然后它崩溃了
Listening on localhost:4567, CTRL+C to stop
2016-06-17 11:10:34 - TypeError - no implicit conversion of nil into Hash:
sinatrabug:8:in `merge'
sinatrabug:8:in `block in <main>'
当我直接访问机架request.params 时,它可以工作。我查看了 Sinatra 的来源,但无法弄清楚。
所以我有一个解决我实际问题的方法。但我不知道为什么它有效。
我的问题是:为什么我可以将param 分配给参数,为什么类Hash 但在defaults.merge params 中却抛出异常?
有什么想法吗?
【问题讨论】:
-
你能发布
params.inspect的输出吗?也可以尝试附加.to_h。有时它有效! -
params.inspect?returns:NoMethodError - undefined methodinspect?'对于 {}:Hash:. I already tried the.to_h` 方法无效。 -
@SteffenRoller 没有问号,应该是
params.inspect -
params.inspect返回一个空哈希{}