在Sinatra中,我使用params来获取通过URL查询字符串传递的键/值.我注意到我可以使用字符串或符号作为获取值的键.因此,如果URL是:
http://localhost:4567/x?a=1&b=2
Run Code Online (Sandbox Code Playgroud)
然后:
params[:a] # => "1"
params["a"] # => "1"
params.to_s # => '{"name"=>"x", "a"=>"1", "b"=>"2"}'
params.class # => Hash
Run Code Online (Sandbox Code Playgroud)
我可以告诉params是一个哈希.但这似乎不是Hash的常见行为.
h = {"a" => "1", "b" => "2"}
h["a"] # => "1"
h[:a] # => nil
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下如何通过Sinatra实现这一目标吗?
Ale*_*lex 18
阅读源代码总是一个好主意.具体来说,该indifferent_params方法.
# Enable string or symbol key access to the nested params hash.
def indifferent_params(params)
params = indifferent_hash.merge(params)
params.each do |key, value|
next unless value.is_a?(Hash)
params[key] = indifferent_params(value)
end
end
Run Code Online (Sandbox Code Playgroud)
正如评论所述,这个方法(在同一文件的第704行调用)允许字符串和符号访问params哈希.
| 归档时间: |
|
| 查看次数: |
5335 次 |
| 最近记录: |