Migración de Llave Foránea: Enlazar Tarea con Usuario en Rails
Clase 24 de 36 • Curso de Introducción a Ruby on Rails
Contenido del curso
Entorno de desarollo
Nuestra primera aplicación
- 6

Arquitectura MVC y Flujo de Peticiones en Rails
07:22 min - 7

Creación y Configuración de Aplicaciones Web con Ruby on Rails
11:18 min - 8

Creación de Rutas y Controladores en Ruby on Rails
10:15 min - 9

Creación de Modelos y Migraciones en Ruby on Rails
13:12 min - 10

Gestión de Credenciales Seguras en Ruby on Rails
11:57 min - 11

Gestión de Assets y Layouts en Rails: Asset Pipeline y Webpacker
12:31 min - 12

Uso del Generador Scaffold en Ruby on Rails
10:51 min - 13

Migraciones y Consistencia de Modelos en Rails
05:57 min - 14

Migración de Plantillas ERB a Haml en Ruby on Rails
08:47 min - 15

Creación de Formularios Dinámicos con SimpleForm y Haml en Rails
12:19 min - 16

Internacionalización de Aplicaciones Rails con i18n y i18n-tasks
09:29 min - 17

Debugging en Ruby on Rails: Uso de Bybug y Pry
09:03 min
Proyecto del curso: primeros pasos
- 18

Desarrollo de un Sistema de Gestión de Tareas con Ruby on Rails
05:35 min - 19

Diseño de Modelos de Datos para un Organizador de Tareas
05:46 min - 20

Creación de Scaffolds y Modelos en Rails con SimpleFrame y Bootstrap
10:08 min - 21

Internacionalización de Formularios en Rails con i18n y SimpleForm
11:03 min - 22

Validaciones de Modelos en Ruby on Rails
10:42 min
Proyecto del curso: usuarios
- 23

Autenticación de Usuarios con Devise en Rails
11:42 min - 24

Migración de Llave Foránea: Enlazar Tarea con Usuario en Rails
Viendo ahora - 25

Integración Visual y Estructural en Rails: Usuario, Tarea y Participante
09:54 min - 26

Manejo de Formularios Anidados con Cocoon en Rails
12:25 min - 27

Formularios Dinámicos en Rails con Cocoon y Validaciones de Unicidad
09:36 min - 28

Permisos y Accesos con KanKan en Aplicaciones Rails
14:13 min
Proyecto del curso: interacciones
- 29

Callbacks en Controladores y Modelos en Rails
08:59 min - 30
Automatización de Inserción de Datos en Rails con db:seed
07:38 min - 31

Envío de Correos con ActionMailer en Rails
13:25 min - 32

Creación de notas dinámicas en tareas con Ruby on Rails
17:08 min - 33

Inserciones Dinámicas de Notas con AJAX y SJR en Rails
09:12 min - 34
Mejora de Interfaces con Bootstrap en Aplicaciones Rails
16:19 min
Cierre
¿Cómo realizar una migración manual en Rails para enlazar llaves foráneas?
La capacidad de realizar migraciones manuales en Rails es sumamente útil para cualquier desarrollador que busque mantener sus modelos actualizados y eficientes. A través de comandos especializados, puedes modificar la estructura de tu base de datos conforme tus proyectos evolucionan. En esta ocasión, exploraremos cómo enlazar la llave foránea de una tarea con la asignación de un usuario en Rails.
¿Cómo configurar la migración inicial?
Para comenzar la migración, primero accede a tu consola de comandos y ejecuta el comando rails generate migration. Este comando es esencial porque te permite actualizar y modificar la estructura de tu base de datos conforme tus requerimientos cambian. En el caso de una tarea, lo que buscamos es añadir un propietario, que será el usuario encargado de dicha tarea.
rails generate migration AddOwnerToTask user:references
Este comando generará una nueva migración en la carpeta db/migrate. Accede a este archivo con tu editor de texto favorito para realizar las modificaciones necesarias.
¿Cómo definir la relación en el modelo?
Una vez en el archivo de migración, queremos asegurarnos de que la tarea incluya una referencia de usuario, que ahora denominaremos "propietario" para mayor claridad en la relación. Cambiamos el término user por owner y aseguramos que la relación no pueda ser nula y sea foránea.
Además, es importante indicarle a Rails que a pesar de llamar a la relación Owner, la tabla que debe buscar es la de Users.
class AddOwnerToTask < ActiveRecord::Migration[6.0]
def change
add_reference :tasks, :owner, null: false, foreign_key: { to_table: :users }, index: true
end
end
¿Cómo ajustar los modelos?
Para complementar el proceso, debemos modificar el modelo de la tarea para reflejar esta nueva relación. Navega a app/models/task.rb y añade la asociación belongs_to :owner, especificando que el Owner es realmente un Usuario.
class Task < ApplicationRecord
belongs_to :category
belongs_to :owner, class_name: 'User'
end
En el modelo de usuario (si se desea), se puede añadir la contraparte de la relación con has_many :tasks.
class User < ApplicationRecord
has_many :tasks, foreign_key: :owner_id
end
¿Cómo ejecutar la migración y solucionar posibles errores?
Finalizadas las modificaciones en código, regresa a la consola y ejecuta el comando rails db:migrate. Sin embargo, si encuentras un error relacionado con registros existentes que no cumplen con la validación del owner_id, puedes resolverlo con el comando rails db:reset.
rails db:migrate
Si el error persiste, detén cualquier servidor o proceso que esté en ejecución y usa:
rails db:reset
Este comando restablecerá tu base de datos a la versión inicial, permitiendo que todas las migraciones se ejecuten desde el principio, incluyendo las nuevas.
¿Qué recomendaciones tener en mente?
- Siempre realiza copias de seguridad de tu base de datos antes de proceder con cambios significativos.
- Asegúrate de detener cualquier servidor que pueda interferir con los comandos de migración.
- Documenta tus migraciones para que tú y otros desarrolladores puedan entender fácilmente los cambios realizados.
¡Anímate a seguir explorando y experimentando con Rails! Cada paso que tomas te acerca más a ser un experto en el desarrollo ágil y eficiente.