Trabajando con Migraciones en Ruby on Rails 5

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):

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:

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:

bin/rails generate migration CreatePostres

Luego de ejecutar el comando se nos creará una Migración nueva vacía sin datos

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

$ bin/rails generate migration AgregarCodigoPostre part_number:string:index

Nos crea una migración en donde colocaremos el nuevo campo

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

$ bin/rails generate migration BorrarCodigoPostre codigo:string

Nos generará una migración en donde indicamos que se borre la columna codigo

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

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

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

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

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.