节点作为HAB而不是RABL中的数组

时间:2017-05-15 11:22:27

标签: 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: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,但它也渲染了一个数组。

感谢您的帮助!

1 个答案:

答案 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

将构建哈希而不是数组。