En esta página:
Trabajar con Migraciones en Ruby on Rails es muy fácil, solo es cuestión que entiendas los pasos adecuados para que puedas gestionar tablas y los datos que hay en ellas, en este artículo te enseñaremos el proceso para trabajar adecuadamente con migraciones en RoR.
Cuando trabajas con Ruby on Rails (RoR) es muy conveniente emplear las migraciones porque nos brindan una forma consistente y fácil de modificar el esquema de una base de datos a lo largo del tiempo.
Que es una Migración en RoR?
En términos sencillos es una manera de de crear tablas e insertar, eliminar, leer y actualizar datos en una Base de Datos, esta migración se realiza escribiendo código y métodos en un archivo Ruby on Rails, dentro de ese código colocaremos los campos de la tabla, si es una tabla llamada postres, le puedes poner nombre, stock, precio, url, img, fecha_creacion.
Una ves que terminas de escribir en el código la estructura de la tabla ejecutas un comando en tu consola y kaboon la tabla esta creada
En RoR (Ruby on Rails) puedes ver cada migración como una nueva versión de tu base de datos. Un esquema empieza vacío y cada migración la va modificando agregando y eliminando tablas, columnas o entradas. El Active Record Migration de RoR sabe como actualizar un esquema con el paso del tiempo permitiendo llevar a un estado inicial o avanzado del historial de migraciones. Veamos el ejemplo de una migración en RoR a continuación la estructura para una tabla llamada postres con los campos nombre, precio, stock y la fecha y hora (timestamps):
1 2 3 4 5 6 7 8 9 10 11 12 |
class CrearPostres < ActiveRecord::Migration[5.0] def change create_table :postres do |t| t.string :nombre t.string :precio t.string :stock t.timestamps // Fecha y hora de creación end end end |
En el ejemplo anterior se crea un campo id automáticamente y con una propiedad auto incrementable, es decir generará un numero id para cada nuevo registro que se inserte en la tabla postres, el campo timestamps creará 2 columnas una llamada created_at y otro llamado updated_at. Estas columnas son gestionadas automáticamente por el Active Record de RoR.
En ocasiones el sistema de migraciones de RoR Active Record Migrations puede presentar problemas y no saber que hacer para revertir una acción, puedes usar reversible veamos el siguiente ejemplo:
1 2 3 4 5 6 7 8 9 10 11 12 |
class CambiarPrecioPostres < ActiveRecord::Migration[5.0] def change reversible do |dir| change_table :postres do |t| dir.up { t.change :precio, :string } dir.down { t.change :precio, :integer } end end end end |
Crear un Migración
Para crear una migración en RoR ejecuta el siguiente comando:
1 2 3 |
bin/rails generate migration CreatePostres |
Luego de ejecutar el comando se nos creará una Migración nueva vacía sin datos
1 2 3 4 5 6 |
class CreatePostres < ActiveRecord::Migration[5.0] def change end end |
Dentro de la carpeta de tu proyecto existe una carpeta llamada db y dentro de ella otra carpeta migrate en donde se almacenan todas las migraciones que vayas creando. Cada migracion se creará con un nombre de archivo similar a 20180831220000_create_postres.rb el nombre de este archivo es creado usando la fecha y hora en que fue creada la migración.
Gestionando Migraciones
Puedes realizar múltiples operaciones en RoR para las migraciones, por ejemplo si deseas agregar un indice a tu tabla ejecuta
1 2 3 |
$ bin/rails generate migration AgregarCodigoPostre part_number:string:index |
Nos crea una migración en donde colocaremos el nuevo campo
1 2 3 4 5 6 7 8 |
class AgregarCodigoPostre < ActiveRecord::Migration[5.0] def change add_column :postres, :codigo, :string add_index :postres, :codigo end end |
Si deseas eliminar un campo o columna de tu tabla ejecuta en tu consola de comandos
1 2 3 |
$ bin/rails generate migration BorrarCodigoPostre codigo:string |
Nos generará una migración en donde indicamos que se borre la columna codigo
1 2 3 4 5 6 7 |
class BorrarCodigoPostre < ActiveRecord::Migration[5.0] def change remove_column :postres, :codigo, :string end end |
Escribiendo Migraciones
Como mencionamos podemos crear tablas a nivel de código, si deseas crear una tabla puedes escribir en tu archivo de migración lo siguiente
1 2 3 4 5 6 7 8 |
create_table :postres do |t| t.string :nombre, t.string :precio, t.string :stock, t.string :img end |
Le agregamos la opcion Engine = Blackhole en la declaración SQL
1 2 3 4 5 6 7 8 |
create_table :postres, options: "ENGINE=BLACKHOLE" do |t| t.string :nombre, t.string :precio, t.string :stock, t.string :img end |
También puedes escribir una tabla con la propiedad JOIN TABLE, por ejemplo una relación de muchos productos pertenecen a muchas categorías, puedes escribir
1 2 3 |
create_join_table :productos, :categorias |
Se creará una migración con 2 campos uno llamado producto_id y otro llamado categoria_id en donde van los ids de los registro relacionados.
También puedes escribir las columnas manualmente
1 2 3 4 5 6 |
create_join_table :productos, :categorias do |t| t.index :producto_id t.index :categoria_id end |
En otro artículo o tutorial te mostraremos ejemplos reales de como nos ayudan las migraciones en RoR (Ruby on Rails).
Síguenos en nuestras Redes Sociales para que no te pierdas nuestros próximos contenidos.