2013-03-11 3 views
10

Hey ragazzi ho una serie di JSON nel mio Rails app in questo formato utilizzando Active Modello SerializerFai nodo principale nel modello attivo Serializer

[ 
    { 
    "contact" : {} 
    }, 
    { 
    "contact" : {} 
    } 
] 

Come faccio a fare in modo che posso rimuovere un livello di nodo sopra il contatto utilizzando il modello serializzatore attiva in questo modo:

[ 
{ 
}, 
{ 
} 
] 

voglio anche rimuovere il nodo nome di "contatto"

risposta

24

questo era coperto di RailsCast #409 Active Model Serializers.

Per rimuovere il nodo radice, aggiungere root: false nella chiamata a render nel controller. Assumendo che il contact s in JSON provengono da un metodo contacts#index, il codice può essere simile:

def index 
    @contacts = Contacts.all 
    respond_to do |format| 
    format.html 
    format.json { render json: @contacts, root: false } 
    end 
end 

Oppure, se non si desidera che i nodi principali in uno dei tuoi JSON, nella vostra ApplicationController, aggiungere il seguente metodo:

def default_serializer_options 
    {root: false} 
end 
+0

In realtà ho questa configurazione. Immagino di non averlo spiegato correttamente. L'oggetto ha una lista di attributi incluso l'oggetto contatto e ho nascosto tutti gli altri attributi. Voglio solo che l'oggetto contatto sia la radice. – Madhan

5

Di solito il nodo radice ha il nome del controller di default se non ho sbagliato.

format.json { render json: @contacts} 

Ovviamente è necessario rimuovere root false, rimuove il nome del nodo.

Se si desidera contattare l'uso oggetto radice questo:

format.json { render json :@contacts, :root => 'contact' } 
4

/config/initializers/serializer.rb

ActiveModelSerializers.config.adapter = :json_api # Default: `:attributes` 

Con ActiveModelSerializers predefinite utilizzeranno il Adattatore attributi (no radice JSON). Tuttavia, consigliamo vivamente di utilizzare l'adattatore JSONAPI, il quale segue 1.0 del formato specificato in jsonapi.org/format.

2

Per le persone che utilizzano ActiveModel :: Serializer v0.10.x, avrete bisogno di creare un inizializzatore e includere le seguenti:

# config/initializers/serializer.rb 
ActiveModelSerializers.config.adapter = :json 
ActiveModelSerializers.config.json_include_toplevel_object = true 

Poi, basta riavviare l'app e si dovrebbe ottenere la radice oggetti che desideri.

Questo funziona in Rails 5.1.x. YMMV. HTH.