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.