Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails:不区分大小写的参数哈希键?_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails Rails:不区分大小写的参数哈希键?

Ruby on rails Rails:不区分大小写的参数哈希键?,ruby-on-rails,ruby,Ruby On Rails,Ruby,Rails中的params散列能否将键规范化为不区分大小写 如果Rails收到带有以下查询参数的GET请求http://localhost.com:3000/username?debug=true&vErBoSe=true params[:verbose]将为nil,您需要使用params[:verbose]来获取值。最好使键简单并遵循约定。通过将所有键设置为小写/小写。如果您需要一个值,那么可以将变量降格,然后将其传递给散列 散列: params = {key: 'Hello', anothe

Rails中的params散列能否将键规范化为不区分大小写

如果Rails收到带有以下查询参数的
GET
请求http://localhost.com:3000/username?debug=true&vErBoSe=true


params[:verbose]
将为
nil
,您需要使用
params[:verbose]
来获取值。

最好使键简单并遵循约定。通过将所有键设置为小写/小写。如果您需要一个值,那么可以将变量降格,然后将其传递给散列

散列:

params = {key: 'Hello', another_key: 'World'}
然后你可以这样使用它:

params[var.downcase]

一个选项是在访问其值之前,将params散列转换为一个不区分大小写处理键的散列

Ryan McGeary在at上有一个不区分大小写的哈希的示例实现,我在下面复制了它:

require "active_support/hash_with_indifferent_access"

class CaseInsensitiveHash < HashWithIndifferentAccess
  # This method shouldn't need an override, but my tests say otherwise.
  def [](key)
    super convert_key(key)
  end

  protected

  def convert_key(key)
    key.respond_to?(:downcase) ? key.downcase : key
  end  
end

听起来像是说要添加所有已经用小写字母表示的键,但问题是rails已经从URL生成了哈希……这意味着这不是一个选项!我明白问题的意思。我的答案仍然是一样的。作为一名资深rails开发人员,我还需要将uri小写,从他的示例localhost url来看,这表明他正在使用大写。所以这个问题就像“如何使用goto而不获取意大利面代码?”。答案是,不要使用goto。因此,首先不要使用大写参数。与链接问题不同,参数散列是通过URL或帖子正文从系统外部发出的。处理此问题的简单方法是在控制器中进行调整。Ruby 2.5引入了一个简单的
params.transform\u键!{u 1.downcase}
CaseInsensitiveHash.new(params)[:verbose]