Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails RABL中作为哈希而不是数组的节点_Ruby On Rails_Json_Nodes_Rabl - Fatal编程技术网

Ruby on rails 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:

我有这个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
,但它也渲染了一个数组


谢谢你的帮助

要获得所需内容,您需要更改以下行:

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
而不是
{}
,这样它更可读。