我有这个RABL模板:
object :@pollution => nil
attributes :id, :time
node :components do |p|
p.components.map do |component|
{ component.name => { level: component.level, main: component.main } }
end
end
呈现
{ "id":820,
"time":"2017-05-12 20:00:00 UTC",
"components": [ # I don't need this array
{ "component1": { "level": 3, "main": false } },
{ "component2": { "level": 5, "main": false } },
]
}
我想要这个
{ "id":820,
"time":"2017-05-12 20:00:00 UTC",
"components": {
"component1": { "level": 3, "main" :false },
"component2": { "level": 5, "main" :false },
}
}
因此,我需要一个散列,而不是组件数组,其中键将是组件名称和值 - 散列与组件数据(level(Int)
和main(Bool)
)。
我尝试渲染child :components
,但它也渲染了一个数组。
感谢您的帮助!
答案 0 :(得分:1)
要获得所需内容,您需要更改以下内容:
p.components.map do |component|
{ component.name => { level: component.level, main: component.main } }
end
返回一个数组,如:
p.components.inject({}) do |components, component|
components[component.name] = { level: component.level, main: component.main }
components
end
将构建哈希而不是数组。