Callbacks en Controladores y Modelos en Rails
Clase 29 de 36 • Curso de Introducción a Ruby on Rails
Resumen
¿Qué es un Callback en programación?
En el mundo de la programación, los callbacks desempeñan un papel fundamental en la gestión del flujo de control de una aplicación. Son esencialmente funciones que se ejecutan en un momento específico del ciclo de vida de una aplicación, permitiendo así la ejecución de un cierto conjunto de instrucciones antes o después de una acción principal. Esto es especialmente útil en la web, donde las peticiones y respuestas a menudo requieren ajustes o verificaciones adicionales.
En el contexto de un controlador, los callbacks como before action
y after action
se utilizan para ejecutar lógica antes o después de que un controlador realice su tarea principal. Estos permiten, por ejemplo, configurar la internacionalización o autenticar usuarios antes de continuar con una acción específica. Sin embargo, los callbacks no se limitan solo a los controladores; también se aplican a los modelos, permitiendo personalizar el comportamiento de persistencia de una entidad en la base de datos.
¿Cómo implementar un Callback en un modelo de Rails?
Rails facilita la utilización de callbacks en modelos, lo que nos permite intervenir en su ciclo de vida, como las acciones de creación, actualización o eliminación. Abordemos un ejemplo de cómo agregar un callback al modelo Task
que genera automáticamente un código único antes de guardar una tarea.
# Modelo Task con callback before_create
class Task < ApplicationRecord
before_create :create_code
private
def create_code
# Generar código basado en el id del propietario
self.code = "#{owner_id}#{Time.now.to_i.to_s(36)}#{SecureRandom.hex(8)}"
end
end
Paso a paso para generar un código único
-
Agregar un nuevo atributo al modelo: Comenzamos agregando un nuevo atributo
code
de tipo string al modeloTask
. Esto se realiza a través de una migración en Rails.rails generate migration AddCodeToTasks code:string
-
Ejecutar la migración: Para aplicar esta modificación a la base de datos, ejecutamos:
rails db:migrate
-
Definir el Callback: Dentro del modelo
Task
, declaramos unbefore_create
que llama al métodocreate_code
, cuya responsabilidad es asignar un código único al atributocode
. -
Implementar el método
create_code
: Generamos un código compuesto por múltiples elementos para asegurar su unicidad:- ID del propietario: Utilizar el ID de usuario como prefijo.
- Estampa de tiempo: Convertir el tiempo actual a una cadena en base 36 para reducir su longitud.
- Código aleatorio seguro: Utilizar
SecureRandom.hex(8)
para añadir un componente aleatorio.
Este enfoque no solo asegura que cada tarea tenga un código único, sino que también ilustra la flexibilidad y poder que ofrecen los callbacks en procesos de persistencia en Rails.
¿Dónde encontrar más información sobre Callbacks en Rails?
Para explorar más sobre los callbacks disponibles en Rails, es recomendable revisar la guía oficial de Rails, concretamente la sección de Active Record Callbacks
. Aquí se lista un catálogo exhaustivo de callbacks que se pueden utilizar para modificar el ciclo de vida de los modelos.
Para acceder a esta guía:
- Busca en tu navegador preferido 'Rails Guides'.
- Dentro del índice, localiza
Active Record Callbacks
. - En la sección 3,
Available Callbacks
, se presentan todos los métodos y sus usos específicos.
A través de estos recursos, es posible profundizar en cómo los callbacks pueden optimizar los procesos de manejo de datos, permitiendo la ejecución de lógica personalizada en diversas etapas del ciclo de vida de un modelo. Encourage the exploration and adoption of these powerful tools to enhance your application's functionality.