Implementación de Búsqueda de Posts con Servicios en Rails
Clase 17 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 de Entidad Relación para Modelos de Aplicación
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

Implementación de Pruebas y Controladores en Rails
10:34 min - 13

Creación y Actualización de Posts con Pruebas TDD
10:12 min - 14

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

Serialización de Modelos en Rails con ActiveModelSerializer
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
Viendo ahora - 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

Pruebas de Autenticación en API con Test Driven Development
12:17 min - 22

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

Autenticación de Usuarios en Controladores Rails
09:20 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

Pruebas de API con Postman: Ejecución y Verificación de Respuestas
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
¿Cómo implementar la lógica de búsqueda en una aplicación Rails?
Cuando desarrollamos aplicaciones en Rails, una de las mejores prácticas es mantener los controladores limpios y delegar la lógica de negocio a clases o servicios adicionales. Hoy aprenderemos a implementar la lógica de búsqueda de posts de manera eficiente utilizando un servicio dedicado. ¡Vamos allá!
¿Cómo estructuramos la lógica en el controlador?
En primer lugar, nos concentramos en el controlador de posts, específicamente el método index. La primera línea del código asegura que solo se muestren los posts publicados. Aquí decidimos si en los parámetros de la petición se incluye uno llamado search y si está presente y no es nil. Esto nos indica que el usuario desea realizar una búsqueda específica.
En lugar de implementar toda la lógica en el controlador, lo cual no es recomendable, haremos uso de un servicio adicional. Esto nos permitirá mantener el controlador ligero y más manejable.
¿Qué es el servicio PostSearchService?
Optamos por crear una clase especializada, PostSearchService, que se encargará de la búsqueda, asegurando que el controlador permanezca limpio y enfocándose solo en recibir y enviar datos relevantes. La clase se implementa en una carpeta de servicios personalizada que podemos crear dentro de nuestro proyecto Rails.
El método clave dentro de esta clase es search, y funciona como método de clase que recibe los current_posts y el query de búsqueda. Usa SQL para realizar la búsqueda, filtrando por el título de los posts mediante la palabra clave LIKE, incorporando comodines % para realizar búsquedas parciales. Esto permite encontrar posts que coincidan parcialmente con el término de búsqueda proporcionado.
class PostSearchService
def self.search(current_posts, query)
current_posts.where('title LIKE ?', "%#{query}%")
end
end
¿Cuál es la ventaja de utilizar un servicio separado?
Utilizar una clase dedicada para la lógica de búsqueda ofrece múltiples beneficios:
- Controladores ligeros: Al mantener los controladores libres de lógica compleja, facilitamos su mantenimiento y la mejora continua de nuestro código.
- Modularidad y escalabilidad: La lógica de búsqueda está encapsulada en una única clase que puede ser modificada sin afectar otras partes del sistema. Esto es crítico si necesitamos escalar nuestra aplicación o cambiar el motor de búsqueda a algo más robusto, como ElasticSearch.
- Facilidad de actualización: Si se incrementa el volumen de datos, podemos cambiar la implementación interna de la búsqueda sin tener que modificar el controlador.
Este enfoque modular no solo mejora la calidad del código sino que ofrece flexibilidad para futuros cambios. Al implementar un servicio de búsqueda dedicado, adoptamos un diseño más limpio y escalable para nuestras aplicaciones Rails. Sigamos adelante, ¡y no pierdamos el impulso de mejorar nuestras capacidades!