使用JBuilder的内联数组元素

时间:2014-06-27 21:40:24

标签: ruby-on-rails json jbuilder

如何使用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 个答案:

答案 0 :(得分:10)

事实证明,jbuilder内置了对这种用法的支持。您可以通过以下方式使用child!方法:

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

#=> 
{
  "something": [
    { "name": "first", "foo": "bar"},
    { "name": "second", "foo": "baz"}
  ]
}
我觉得它好多了。

答案 1 :(得分:4)

我能想象的唯一类似的东西是使用硬编码哈希:

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