Ruby on rails RABL中作为哈希而不是数组的节点
我有这个RABL模板:Ruby on rails RABL中作为哈希而不是数组的节点,ruby-on-rails,json,nodes,rabl,Ruby On Rails,Json,Nodes,Rabl,我有这个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:
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
,但它也渲染了一个数组
谢谢你的帮助 要获得所需内容,您需要更改以下行:
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
这将构建一个散列而不是数组。您是否尝试过使用
p.components.injection({}){| components,component{124; components[component.name]={level:component.level,main:component.main}
?我在:中收到这个消息。。。“组件”:{“level”:3,“main”:false}
只有一个没有名称的元素。是否使用节点将其包装:组件执行| p |
?是。只有一个元素。啊!!!明白了,我想我没明白你写的。对不起,我知道什么;这是错误。将行更改为具有do
的块,在当前位于块中的行之后,放置components
,以便将其传递到下一个迭代:p.components.inject({}){组件,组件{组件[component.name]={level:component.level,main:component.main};components}
。在一行中,将其拆分为代码>是,使用do
而不是{}
,这样它更可读。