serializers rails new custom active ruby-on-rails activerecord active-model-serializers

ruby on rails - rails - Hacer un nodo raíz en el Serializador de modelo activo



serializer nested object rails (4)

Hola chicos, tengo una variedad de JSON en mi aplicación Rails en este formato usando el Serializador de modelo activo

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

¿Cómo lo hago para eliminar un nivel de nodo por encima del contacto? USANDO el serializador de modelo activo como este:

[ { }, { } ]

También quiero eliminar el nombre de nodo "contacto"


Esto fue cubierto en RailsCast # 409 Serializadores Modelo Activo .

Para eliminar el nodo raíz, agregue root: false en la llamada para render en su controlador. Suponiendo que sus contact en JSON provienen de un método de contacts#index , su código puede ser algo así como:

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

O bien, si no desea ningún nodo raíz en ninguno de sus JSON, en su ApplicationController , agregue el siguiente método:

def default_serializer_options {root: false} end


Usualmente el nodo raíz tiene el nombre de tu controlador por defecto si no estoy equivocado.

format.json { render json: @contacts}

Por supuesto, necesita eliminar la raíz falsa, elimina el nombre del nodo.

Si desea contacto como objeto raíz, use esto:

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


/config/initializers/serializer.rb

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

Por defecto, ActiveModelSerializers usará el Adaptador de Atributos ( sin raíz JSON ). Pero le recomendamos encarecidamente que utilice JsonApi Adapter, que sigue 1.0 del formato especificado en jsonapi.org/format.


Para las personas que usan ActiveModel :: Serializer v0.10.x, deberá crear un inicializador e incluir lo siguiente:

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

Luego, solo reinicie su aplicación y debería obtener los objetos raíz que desee.

Esto funciona en Rails 5.1.x. YMMV. HTH.