我将以下信息通过参数从视图传递给控制器
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 }
但我仍然得到同样的错误。
答案 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的更多信息。