Rails:不区分大小写的params散列键?

时间:2014-02-11 23:22:42

标签: ruby-on-rails ruby

如何为Rails中的params哈希实现不区分大小写的哈希键?

例如,让我们说通过GET请求发送一些参数,例如:http://localhost.com:3000/username?debug=true&verbose=true

如果verbose参数发送为" vErBoSe = true"然后params [:verbose]不再匹配。

2 个答案:

答案 0 :(得分:1)

一种选择是将params哈希转换为在访问其值之前不敏感地处理密钥的方法。

Ryan McGeary在https://stackoverflow.com/a/2030565/454094有一个不区分大小写的哈希的示例实现,我在下面复制了这些:

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

有了它,你可以这样做:

CaseInsensitiveHash.new(params)[:verbose]

答案 1 :(得分:0)

最好使密钥简单并遵循惯例。通过使所有键小写/小写。如果您需要一个值,那么您将该变量置为低位,然后将其传递给散列。

哈希:

params = {key: 'Hello', another_key: 'World'}

然后你可以像这样使用它:

params[var.downcase]