デフォルトのパラメータと要求に指定された実際のパラメータでハッシュをマージします。私はこの一見無害なスクリプトを呼び出すとき:curl http://localhost:4567?p0=request
とSinatra:paramsハッシュをマージすることはできません
#!/usr/bin/env ruby
require 'sinatra'
get '/' do
defaults = { 'p1' => 'default1', 'p2' => 'default2' }
# params = request.params
params = defaults.merge(params)
params
end
を私は直接それが動作request.params
ラックにアクセスすると、それは
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>'
でクラッシュ。私はSinatraソースを調べましたが、私はそれを理解できませんでした。
私は実際の問題の解決方法を持っています。しかし、私は知らないなぜそれが動作します。
私の質問は:なぜ私は、なぜクラスHash
があるが、defaults.merge params
で、それが例外をスローし、パラメータにparam
を割り当てることができますか?
'params.inspect'の出力を投稿できますか?また、 '.to_h'を追加してみてください。時にはそれは動作します! – thesecretmaster
'params.inspect?'は以下を返します: 'NoMethodError - 未定義のメソッド' inspect? ' {}のためにハッシュ: '。私はすでに '.to_h'メソッドを無駄にしようとしました。 –
@SteffenRoller疑問符はありません。それは 'params.inspect' –