2012-03-12 5 views
23

Sto cercando di eseguire il rendering di una struttura di dati piuttosto semplice utilizzando RABL, ma non riesco a capire come rimuovere correttamente i nodi radice figlio. Ecco i miei due modelli.Rimozione di nodi radice figlio in RABL

In primo luogo, il modello di indice di raccolta.

collection @groups, :object_root => false 

attributes :id, :name 
child :files do 
    extends 'groups/_file' 
end 

E dopo, il modello parziale del file.

object @file 

attributes :id 

Questi due modelli finiscono per produrre il seguente JSON:

[ 
    { 
     "id":"4f57bf67f85544e620000001", 
     "name":"Some Group", 
     "files":[ 
     { 
      "file":{ 
       "id":"4f5aa3fef855441009000007" 
      } 
     } 
     ] 
    } 
] 

voglio trovare un modo per rimuovere il tasto "file" radice all'interno della collezione file. Qualcosa di simile:

[ 
    { 
     "id":"4f57bf67f85544e620000001", 
     "name":"Some Group", 
     "files":[ 
     { 
      "id":"4f5aa3fef855441009000007" 
     } 
     ] 
    } 
] 

risposta

47

Su ultime versioni di Rabl, è necessario impostare questa configurazione se si desidera include_root_json essere false a tutti i livelli.

Rabl.configure do |config| 
    config.include_json_root = false 
    config.include_child_root = false 
end 
+0

sto avendo lo stesso problema anche, e ho provato questa soluzione per il wiki e riavviato il mio server una manciata di volte, tutto inutilmente. – ohayon

+0

Non funziona per me a partire da rabl 0.9.x. – Machisuji

2

Questo è il solito modo di rimuovere il JSON radice (piuttosto che specificare object_root: false)

config/inizializzatori/rabl_config.rb

Rabl.configure do |config| 
    config.include_json_root = false 
end 

Vuol in movimento che a lì (e il riavvio delle rotaie), aggiustarlo?

+3

Beh, non sto veramente cercando di regolarlo a livello globale. Voglio inserire di default i nodi radice. – BBonifield

+1

Love this. Preferirei dirlo a/include/alla radice dell'oggetto piuttosto che escluderlo. – RyanScottLewis

+0

@ c00lryguy se si esegue 'include_json_root = false', come si dice di includere la radice caso per caso? –

12

provare a sostituire:

child :files do 
     extends 'groups/_file' 
    end 

con:

node :files do |group| 
     group.files.map do |file| 
     partial 'groups/_file', object: file, root: false 
     end 
    end 
+2

Questo è perfetto. Grazie! – BBonifield

+0

quello sopra è più perfetto: P – nXqd

0

solo mettendo là fuori, nel caso in cui si desidera applicare per un bambino specifico:

child :files, :object_root => false do 
    extends 'groups/_file' 
end