哈希哈希在轨道上的红宝石

时间:2012-07-17 19:10:07

标签: ruby-on-rails ruby ruby-on-rails-3

我将以下信息通过参数从视图传递给控制器​​

parameters:{"Something"=>{"a" => "1", "b" => "0", "c" => "1", "d" => "0" #and so on}}

我想访问所有以“1”作为值的字符并连接到字符串中。

我试过

Something.each do |key, value|
if(value == "1")
string = string + key
end 
end

抛出错误说它无法执行nil.each并且我可能期待一个数组。 在我看来,Something是一个哈希,反过来又有一些哈希。 所以我初衷了Something to

Something = Hash.new { |Something, k| Something[k] = Hash.new }

但我仍然得到同样的错误。

1 个答案:

答案 0 :(得分:1)

使用params哈希。这应该做你需要的:

params["Something"].select {|k, v| v == "1"}.keys.reduce(:+)
  • select会将参数仅过滤为值为"1"
  • 的参数
  • keys返回一个包含散列
  • 中所有键的数组
  • reduce使用concat操作(+)
  • 连接所有元素

修改

连接并添加“Extra”字样:

  • 对于每个参数:

    params["Something"].select {|k, v| v == "1"}.keys.inject("") {|result, p| result += "Extra #{p}"}
    
  • 仅限额外参数,但不包括第一个参数:

    params["Something"].select {|k, v| v == "1"}.keys.inject {|result, p| result += "Extra #{p}"}
    

查看有关inject here的更多信息。