在Rails中應如何實現不區分大小寫的散列鍵的params散列?Rails:大小寫不敏感的參數哈希鍵?
例如,讓我們說幾句PARAMS通過GET請求發送,如下列:http://localhost.com:3000/username?debug=true&verbose=true
如果詳細參數被作爲「詳細=真」則PARAMS [:詳細]不再火柴。
在Rails中應如何實現不區分大小寫的散列鍵的params散列?Rails:大小寫不敏感的參數哈希鍵?
例如,讓我們說幾句PARAMS通過GET請求發送,如下列:http://localhost.com:3000/username?debug=true&verbose=true
如果詳細參數被作爲「詳細=真」則PARAMS [:詳細]不再火柴。
這是更好地使按鍵簡單,並按照約定。通過使所有的鍵小寫/小寫。如果你需要一個值,那麼你將這個變量變小,然後把它傳遞給哈希。
哈希:
params = {key: 'Hello', another_key: 'World'}
然後你可以使用它像這樣:
params[var.downcase]
一種選擇將是params哈希錶轉換成一個它不區分大小寫處理密鑰的情況下,訪問它的值之前。
瑞安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]
這聽起來像你說要添加已經以小寫字母的所有密鑰,但問題要求哈希已經由來自URL的軌道生成的情況......這意味着這不是一個選項! – Blake
我明白問題在說什麼。我的答案仍然保持不變。作爲一名高級rails開發人員,我還沒有必要小寫一個uri,並且從他的examplehost local url中可以看出,他表示他正在做大寫。所以這個問題就像'我如何使用goto並且沒有獲得意大利麪代碼?'。答案是,不要使用goto。爲此,首先不要有大寫參數。 – sonnyhe2002