使用JBuilder的内联数组元素

Jas*_*son 2 json ruby-on-rails jbuilder

如何使用Jbuilder创建一个包含元素的数组,而不首先将其设置为变量?

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

{
  "something": [
    { "name": "first", "foo": "bar"},
    { "name": "second", "foo": "baz"}
  ]
}
Run Code Online (Sandbox Code Playgroud)

我发现有效的唯一方法如下.

json.something do
  something = [
    { name: 'first', foo: 'bar' },
    { name: 'second', foo: 'baz' }
  ]
  json.array! something do |item|
    json.(item, :name, :foo)
  end
end
Run Code Online (Sandbox Code Playgroud)

有没有办法让它看起来更像这样?

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
Run Code Online (Sandbox Code Playgroud)

Car*_*sin 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"}
  ]
}
Run Code Online (Sandbox Code Playgroud)

我认为它好多了.


Rub*_*cer 6

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

json.something do
   json.array! [
     {name:'first',foo:'bar'},
     {name:'second',foo:'baz'}
   ]
end
Run Code Online (Sandbox Code Playgroud)