例如,我有一个array = [zoo, foo, bar, ...]
。
我需要使用哈希创建json,其中keys是数组的值,而hash的值是另一个哈希 像这样:
"model_field": {
"zoo": {
"name": "zoo",
"key2": "value2",
"key3": "value3"
},
"foo": {
"name": "foo",
"key2": "value2",
"key3": "value3"
},
...
}
我试图做这样的事情
def json
render json: {model_field: {array.each do |x|
{x => {name: x, key2: "value2", key3: "value3"}
}
end
}
}
end
但是我被困住了。谁能帮我吗?
答案 0 :(得分:0)
each
返回您迭代的对象,无论您在循环中进行了什么操作。
%w[zoo foo bar].each { |x| } # => ["zoo", "foo", "bar"]
您可以做的是each_with_object
将哈希传递给每个迭代并填充它。在最后一次迭代之后,这将返回您传入的对象:
array = %w[zoo foo bar]
output = {
model_field: array.each_with_object({}) do |x, hash|
hash[x] = { name: x, key2: rand(1..100) }
end
}
# => {
# :model_field=>{
# "zoo"=>{:name=>"zoo", :key2=>25},
# "foo"=>{:name=>"foo", :key2=>83},
# "bar"=>{:name=>"bar", :key2=>98}
# }
# }