2014-06-27 5 views
1

Comment créer un tableau contenant des éléments à l'aide de Jbuilder sans le paramétrer d'abord sur une variable?Eléments de tableau incorporés avec JBuilder

Je veux finir avec les éléments suivants en utilisant JBuilder

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

La seule méthode que j'ai trouvé qui fonctionne est le suivant.

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

Y at-il un moyen de le faire ressembler plus à ceci?

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 

Répondre

4

La seule chose que je peux même imaginer est hasch hardcoded:

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

Assez mauvaise approche .. Nous mixons json avec la syntaxe jbuilder. – IvRRimUm

+0

@IvRRimUm c'est une syntaxe ruby, pas une syntaxe json. Mais merci pour les commentaires. –

4

il se avère que JBuilder a un support intégré pour ce genre d'utilisation. Vous pouvez utiliser la méthode child! de cette façon:

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"} 
    ] 
} 

il est beaucoup mieux, je pense.

+0

Juste ce que je recherchais. – IvRRimUm