2013-08-16 9 views
6

Devo seguire il codice rabl per generare alcuni dati JSON.nome radice figlio errato in rabl e impossibile impostare il nome radice figlio

object @event 
attributes :id, :EID, :name, :address, :description, :latitude, :longitude, :time, :created_at 
node(:rsvp_count) { |event| event.rsvp_users.count } 
node(:check_in_count) { |event| event.checkedin_users.count } 
node(:FID) { |event| event.creater.FID if event.creater} 

child :rsvp_users, :object_root => false do 
    extends 'users/index' 
end 

child :checkedin_users, :object_root => false do 
    extends 'users/index' 
end 

E i dati che genera assomiglia a questo:

[ 
    { 
     "event": { 
      "id": 2, 
      "EID": 123458, 
      "name": "event no.2", 
      "address": "189 elm st", 
      "description": "awesome event", 
      "latitude": 10, 
      "longitude": 10, 
      "time": "2013-10-20T18:00:00Z", 
      "created_at": "2013-08-15T21:06:21Z", 
      "rsvp_count": 3, 
      "check_in_count": 0, 
      "FID": 12345678, 
      "users": [ 
       { 
        "id": 4, 
        "FID": 112233445, 
        "name": "name1", 
        "using_app": true 
       }, 
       { 
        "id": 3, 
        "FID": 9999, 
        "name": "name2", 
        "using_app": false 
       }, 
       { 
        "id": 2, 
        "FID": 123456789, 
        "name": "name3-robot", 
        "using_app": true 
       } 
      ], 
      "checkedin_users": [] 
     } 
    } 
] 

È possibile ignorare il event hash, la roba strana che sta accadendo in basso nella matrice 2 users.

Quindi, come si può vedere, la matrice bambino rsvp_users sta rivelando con il nome users anche se ho impostato il root param a "rsvp_users". Tuttavia, per l'array checkedin_users (che al momento è vuoto), non ho bisogno di fare nulla, e il suo nome è automaticamente checkedin_users. Cosa sta succedendo qui? È un bug in rabl? O è qualcosa che mi manca?

+2

Hai provato "child: rsvp_users =>: rsvp_users,: object_root => false"? – Bigxiang

+0

Sì, ce l'ho, e questo in effetti mi dà un errore. Ma se faccio ': rsvp_users =>: rsvp_users' da solo senza': object_root => false', andrebbe bene. Ma non voglio che ogni oggetto dell'array abbia un nome. – Enzo

+1

prova questo "child {: rsvp_users =>: rsvp_users}, {: object_root => false}", funziona sulla mia macchina. – Bigxiang

risposta

7

Ho riscontrato lo stesso errore esatto, il problema sembra essere l'impostazione di root_oggetto su false. seguito il commento di Bigxiang ho sperimentato un po 'e ho trovato che questo funziona fantasticamente:

child({:rsvp => :rsvp}, {:object_root => false}) do 
    extends "users/index" 
end 

nota sia la parentesi tonde "()" e bretelle "{}".