如何为Rails中的params哈希实现不区分大小写的哈希键?
例如,让我们说通过GET请求发送一些参数,例如:http://localhost.com:3000/username?debug=true&verbose=true
如果verbose参数发送为" vErBoSe = true"然后params [:verbose]不再匹配。
答案 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]