Rails - 从 params 哈希中获取所有键

F4K*_*4Ke 5 ruby hash ruby-on-rails

为了提高我的Rails应用程序安全性,我想知道如何从参数哈希中获取所有密钥

哈希示例:

params = 
{"id"=>23, "name"=>"test", "infos"=>{"data"=>"er323e3ee23reQir", "signed"=>true}}
Run Code Online (Sandbox Code Playgroud)

如果我做 params.keys

我获得了 : ["id", "name", "infos"]

但我想在一个简单的数组中获取所有键,例如: ["id", "name", "infos", "data", "signed"]

有一种简单的方法可以做到这一点吗?

Ale*_*ein 3

尝试这个:

def deep_hash_keys(h)
 h.keys + h.map { |_, v| v.is_a?(Hash) ? deep_hash_keys(v) : nil }.flatten.compact
end

params = {"id"=>23, "name"=>"test", "infos"=>{"data"=>"er323e3ee23reQir", "signed"=>true}}

deep_hash_keys(params) # => ["id", "name", "infos", "data", "signed"]
Run Code Online (Sandbox Code Playgroud)