Ruby on rails Rails-从params散列获取所有密钥
为了提高我的Ruby on rails Rails-从params散列获取所有密钥,ruby-on-rails,ruby,hash,Ruby On Rails,Ruby,Hash,为了提高我的Railsapp安全性,我想知道如何从parameters散列中获取all密钥 哈希示例: params = {"id"=>23, "name"=>"test", "infos"=>{"data"=>"er323e3ee23reQir", "signed"=>true}} 如果我执行参数键 我获得:[“id”、“name”、“infos”] 但我想在一个简单的数组中获取所有密钥,比如:[“id”、“name”、“infos”、“data”、“sign
Rails
app安全性,我想知道如何从parameters散列中获取all密钥
哈希示例:
params =
{"id"=>23, "name"=>"test", "infos"=>{"data"=>"er323e3ee23reQir", "signed"=>true}}
如果我执行参数键
我获得:[“id”、“name”、“infos”]
但我想在一个简单的数组中获取所有密钥,比如:[“id”、“name”、“infos”、“data”、“signed”]
有一个简单的方法可以做到这一点吗?试试这个:
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"]
我将使用一种新方法:
class Hash
def all_keys
keys = []
each{|k,v|
keys << k
keys << v.all_keys if v.respond_to?(:all_keys)
}
keys.flatten.uniq
end
end
params = {"id"=>23, "name"=>"test", "infos"=>{"data"=>"er323e3ee23reQir", "signed"=>true}}
p params.all_keys
类哈希
定义所有_键
键=[]
每个{k,v|
键“test”、“infos”=>{“data”=>“er323e3ee23reQir”、“signed”=>true}
p参数所有_键
优点:您还可以在非散列函数中定义一个all_keys-method。您可以使用monkey-patch散列类:
class Hash
def all_keys
keys + map { |k, v| v.is_a?(Hash) ? v.all_keys : nil }.flatten.compact
end
end
params = {"id"=>23, "name"=>"test", "infos"=>{"data"=>"er323e3ee23reQir", "signed"=>true}}
params.all_keys # => ["id", "name", "infos", "data", "signed"]