Active Model serializers: control total de JSON en Rails
Clase 15 de 33 • Curso de Creación de APIs con Ruby on Rails
Contenido del curso
Proyecto
- 3

Creación de APIs con Rails: Proyecto Blog API paso a paso
04:37 min - 4

Configuración de Gemas para Pruebas en Proyectos Rails
06:26 min - 5

Configuración de Gemas en Proyectos Rails: Arspec, Factory Bot y Database Cleaner
07:25 min - 6

Implementación de un Health Check Endpoint en API con RSpec
12:28 min - 7

Diseño de Casos de Uso y Diagramas de Entidad para Aplicaciones
03:16 min - 8

Diagrama entidad relación: usuario y post
01:41 min - 9

Modelado de Aplicaciones con TDD en Rails
05:59 min - 10

Validaciones y Pruebas TDD en Rails: Modelos USR y Post
07:07 min - 11

Implementación de Endpoints para Listar y Mostrar Posts con TDD
15:12 min - 12

Implementar controlador Posts con TDD
10:34 min - 13

Pruebas TDD para crear y actualizar posts
10:12 min - 14

Implementación de Métodos y Manejo de Excepciones en Rails API
10:23 min - 15

Active Model serializers: control total de JSON en Rails
Viendo ahora - 16

Búsqueda y Filtrado de Posts por Título con TDD
05:57 min - 17

Implementación de Búsqueda de Posts con Servicios en Rails
06:06 min - 18

Problema N+1 en Rails: Detección y Solución Eficaz
04:40 min - 19

Identificación y solución del problema N+1 en Rails
06:20 min - 20

Flujo de Autenticación en APIs con Tokens y Proveedores
05:29 min - 21

Tests con RSpec para autenticación de tokens
12:17 min - 22

Autenticación con Tokens: Implementación en Rails API
05:53 min - 23

Autenticación de Usuarios en Controladores Rails
09:19 min - 24

Autenticación y Seguridad en CRUD de Posts en Rails
09:17 min - 25

Pruebas de Creación y Actualización con Autenticación en Rails
14:21 min - 26

Probando API Ruby on Rails con Postman
10:43 min - 27

Caching en Aplicaciones Web: Funciones y Niveles
07:15 min - 28

Aceleración de Búsquedas en Rails con Caching
08:23 min - 29

Background Jobs en Rails: Conceptos y Funcionalidades
05:45 min - 30

Procesamiento en Background y Envío de Correos con Rails
09:45 min - 31

Envío de Correos en Rails con ActionMailer y Background Jobs
11:06 min - 32
Autenticación y Autorización con JWT y Auth0 en Aplicaciones Web
03:48 min
Cierre
Gana control total sobre la salida JSON en Rails con Active Model serializers. Aquí verás cómo instalar la gema, generar el serializer de post y definir un formato claro con campos anidados, validado mediante request tests. Todo con un enfoque práctico y directo.
¿Qué problema resuelve Active Model serializers en Rails?
Cuando Rails serializa modelos, el formato por defecto puede quedarse corto. Con Active Model serializers tienes control fino sobre qué atributos incluir y cómo estructurarlos. Al crear un serializer, Rails lo usa por convención para la representación JSON del modelo asociado. Si solo incluyes el ID, las pruebas que esperan más datos fallarán, lo que confirma que debes declarar los atributos deseados.
- Más control sobre la serialización a JSON del modelo post.
- Convención de Rails: si existe serializer, se usa automáticamente.
- Por defecto solo se incluye ID.
- Formato esperado: título, contenido, publicado y un author anidado.
¿Cómo instalar y generar el serializer de post?
Primero instala la gema adicional y genera el archivo base del serializer. La gema se declara en plural: active_model_serializers versión 0.10.8.
# Gemfile
gem 'active_model_serializers', '0.10.8'
Ejecuta la instalación:
bundle install
Genera el serializer para el modelo post:
rails g serializer post
Esto crea una clase que hereda de ActiveModel::Serializer y sirve como punto central para definir la estructura JSON.
class PostSerializer < ActiveModel::Serializer
end
- Gema adicional declarada en el Gemfile.
- Instalación con bundle.
- Generación con el generator
serializerpara post. - Clase creada:
PostSerializerque hereda deActiveModel::Serializer.
¿Cómo definir atributos, author anidado y validar con pruebas?
El objetivo es retornar, además del id, el título, el contenido, el estado published y un author como hash anidado con nombre, email e id. Si las pruebas de request esperan este formato, inicialmente fallarán hasta que declares los atributos en el serializer y definas el método author.
class PostSerializer < ActiveModel::Serializer
attributes :id, :title, :content, :published, :author
def author
user = self.object.user
{
name: user.name,
email: user.email,
id: user.id
}
end
end
- Atributos incluidos: id, title, content, published.
- Campo author: hash embebido con
name,emaileiddel usuario asociado. - Referencia al objeto serializado con
self.object(el post actual). - Las pruebas de request se ajustan para esperar el nuevo formato y confirman la salida.
¿Qué validan las pruebas y por qué fallan al inicio?
- Validan que se retorne id, título y contenido en el nivel raíz.
- Verifican el hash author con
name,emaileiddel usuario. - Incluyen el campo published en el post.
- Fallan inicialmente porque el serializer solo incluía ID y no el resto de atributos.
Próximo paso natural: implementar el filtro para el endpoint de listar posts y habilitar búsquedas por distintos criterios.
¿Tienes dudas sobre qué campos incluir o cómo estructurar el author? Comparte tu caso en los comentarios y conversemos sobre el mejor formato para tus posts.