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
Resumen
¿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!