Implementación de Métodos y Manejo de Excepciones en Rails API
Clase 14 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
Viendo ahora - 15

Active Model serializers: control total de JSON en Rails
06:03 min - 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
Construye un API de Rails robusto paso a paso: implementa create y update en tu controlador, filtra parámetros con strong parameters y devuelve errores consistentes en JSON. Con una estructura clara y pruebas que pasan, ganarás confianza al escribir controladores mantenibles.
¿Cómo crear y actualizar posts en un controlador Rails?
Para que las pruebas pasen, se implementan las acciones create y update en el controlador. Se usan las versiones con signo de admiración (create! y update!) para que fallen cuando el modelo sea inválido y así poder manejar la excepción.
class PostsController < ApplicationController
def create
post = Post.create!(create_params)
render json: post, status: :created
end
def update
post = Post.find(params[:id])
post.update!(update_params)
render json: post, status: :ok
end
private
def create_params
params.require(:post).permit(:title, :content, :published, :user_id)
end
def update_params
params.require(:post).permit(:title, :content, :published)
end
end
- Usar create! y update! obliga a manejar errores de validación.
- Render en JSON con status adecuado: created en create y ok en update.
- Separar create_params y update_params evita modificar el user_id en updates.
- La ruta correcta es en plural: /posts.
¿Qué parámetros permitir con strong parameters?
- Requerir la clave :post con
params.require(:post). - En create: permitir title, content, published y temporalmente user_id.
- En update: permitir title, content y published; no permitir user_id.
- Esta separación prepara el terreno para autenticación futura.
¿Qué rutas y pruebas aseguran el comportamiento?
Tras implementar el controlador, las pruebas fallan por rutas faltantes. Se agregan las rutas create y update para que el API responda en los endpoints esperados.
# config/routes.rb
resources :posts, only: [:create, :update]
- Agregar solo las rutas necesarias reduce superficie de error.
- Ejecutar pruebas y revisar el primer fallo acelera el ciclo de feedback.
- Corrección de prueba: en creación, esperar que el objeto no sea nil, no que responda a empty.
- Con rutas y expectativa corregidas, las pruebas de creación y actualización pasan.
¿Cómo depurar fallos comunes en pruebas?
- Verificar que la URL sea plural: /posts.
- Confirmar que el ID llega en params para update.
- Ajustar expectativas del test a la naturaleza del objeto (no usar empty en modelos).
¿Cómo manejar excepciones en un API de Rails con rescue_from?
El uso de create! y update! dispara excepciones cuando el registro es inválido. Para responder correctamente y siempre en JSON, se agrega un exception handler con rescue_from.
class PostsController < ApplicationController
rescue_from Exception do |e|
# log.error e.message
render json: { error: e.message }, status: 500
end
rescue_from ActiveRecord::RecordInvalid do |e|
render json: { error: e.message }, status: 422
end
end
- ActiveRecord::RecordInvalid se produce cuando el modelo no cumple validaciones.
- Responder con payload
{ error: mensaje }estandariza las respuestas de error. - Usar 422 para datos inválidos y 500 para errores no controlados.
- El orden importa: el
rescue_fromdeclarado de último tiene más prioridad. Colocar primero la excepción genérica y después la específica. - Buenas prácticas: registrar el error con log.error y contar con monitoreo en producción.
¿Por qué usar el signo de admiración en create/update?
- Obliga a que fallos de validación no pasen silenciosos.
- Facilita pruebas que esperan errores controlados.
- Permite centralizar el manejo con
rescue_fromy responder en JSON.
¿Tienes otra estrategia para estructurar los handlers o prefieres símbolos de estado en lugar de códigos? Comparte tu enfoque en los comentarios.