2012-07-17 126 views
0

我传递以下信息,通过参数从视图控制器哈希散列中的Ruby on Rails的

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 = Hash.new { |Something, k| Something[k] = Hash.new } 

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

回答

1

只需使用params散列即可。这应该做你需要的东西:

params["Something"].select {|k, v| v == "1"}.keys.reduce(:+) 
  • select过滤PARAMS,只有那些与价值"1"
  • keys与哈希
  • reduce所有键返回数组加入了所有元素连续操作(+)

编辑

要连接并添加 “额外” 字:

  • 对于每个参数:

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

有关的详细信息here

+0

@alfonso 谢谢你,我发现我只需要一些按键,我需要一些额外的信息与按键一起连接,比如“a +”extra“”。所以我没有使用keys.reduce(:+)。无论如何,我可以写这样的东西 - keys.reduce(:“Extra”+),这样多余的字符串就会被添加到每个键中? – user1455116 2012-07-17 19:42:45

+0

@opensourceis当然,看看我的编辑。 – alf 2012-07-17 19:55:14

+0

谢谢,这工作。我将从您提供的链接学习更多关于注入和减少的内容。 – user1455116 2012-07-17 20:21:05