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"]