这就是我想要的:
{ "[first_name]" => "first_name", "[last_name]" => "last_name" }
这就是我的尝试:
columns
# => ["first_name","last_name"]
columns.inject({}) do |acc, column|
acc["[#{column}]"] = column
end
# => IndexError: string not matched
似乎认为acc是一个字符串而不是哈希,如下所示:
Rails strange error => IndexError: string not matched
但是肯定acc是哈希。这有什么问题?
答案 0 :(得分:2)
将inject
与哈希一起使用时,请确保在块的末尾返回修改后的哈希:
columns.inject({}) do |acc, column|
acc["[#{column}]"] = column
acc
end
# => {"[first_name]"=>"first_name", "[last_name]"=>"last_name"}
答案 1 :(得分:1)
您还可以使用merge!
汇总结果:
columns.inject({}) { |r, e| r.merge!({"[#{e}]" => e}) }
# => {"[first_name]"=>"first_name", "[last_name]"=>"last_name"}
答案 2 :(得分:0)
hash = columns.inject({}) do |acc, column|
acc["[#{column}]"] = column
acc
end