如何使用符号访问Sinatra PARAMS? [英] How do I access Sinatra params using a symbol?

查看:18
本文介绍了如何使用符号访问Sinatra PARAMS?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在Sinatra中,我使用参数来获取通过URL查询字符串传递的键/值。我注意到我可以使用字符串或符号作为键来获取值。因此,如果URL为:

http://localhost:4567/x?a=1&b=2

然后:

params[:a] # => "1"
params["a"] # => "1"
params.to_s # => '{"name"=>"x", "a"=>"1", "b"=>"2"}'
params.class # => Hash

我看得出Params是一个Hash。但这似乎不是哈希的常见行为。

h = {"a" => "1", "b" => "2"}
h["a"] # => "1"
h[:a] # => nil

有人能解释一下这是如何通过Sinatra实现的吗?

推荐答案

阅读source总是一个好主意。具体来说,indifferent_params method

# 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

正如评论所述,正是此方法(在同一文件的line 704上调用)允许字符串和符号访问params散列。

这篇关于如何使用符号访问Sinatra PARAMS?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆