0

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

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

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

4

1 回答 1

1

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

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

编辑

连接并添加“额外”字:

  • 对于每个参数:

    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 在此处查看更多信息。

于 2012-07-17T19:15:44.797 回答