使用JBuilder内联数组元素

6

如何在不先设置变量的情况下使用JBuilder创建包含元素的数组?

我想使用JBuilder最终得到以下结果:

{
  "something": [
    { "name": "first", "foo": "bar"},
    { "name": "second", "foo": "baz"}
  ]
}

我发现唯一有效的方法如下所示。
json.something do
  something = [
    { name: 'first', foo: 'bar' },
    { name: 'second', foo: 'baz' }
  ]
  json.array! something do |item|
    json.(item, :name, :foo)
  end
end

有没有办法让它看起来更像这样?
json.array! 'something' do
  json.array do
    json.name 'first'
    json.foo 'bar'
  end
  json.array do
    json.name 'second'
    json.foo 'baz'
  end
end
2个回答

18

原来 jbuilder 内置了这种用法的支持。你可以这样使用 child! 方法:

json.something do
  json.child! do
    json.name "first"  
    json.foo "bar"
  end
  json.child! do
    json.name "second"
    json.foo "barz"
  end
end

#=> 
{
  "something": [
    { "name": "first", "foo": "bar"},
    { "name": "second", "foo": "baz"}
  ]
}

我认为这样更好。


1
正是我所寻找的。 - IvRRimUm

6

我能想到的唯一相似的做法是使用硬编码哈希值:

json.something do
   json.array! [
     {name:'first',foo:'bar'},
     {name:'second',foo:'baz'}
   ]
end

1
相当糟糕的方法...我们正在混合使用JSON和Jbuilder语法。 - IvRRimUm
@IvRRimUm 这是 Ruby 的哈希表,不是 JSON 语法。但还是感谢您的反馈。 - Ruby Racer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接