Migraciones
Las migraciones nos permiten hacer cambios sobre el esquema de la base de datos de forma iterativa y consistente.
Una migración es un archivo que se crea dentro de la carpeta db/migrate
y que contiene instrucciones para modificar el esquema de la base de datos (crear tablas, agregar columnas, eliminar columnas, eliminar tablas, etc.).
Cuando creas un modelo desde la línea de comandos con el generador de Rails, automáticamente se crea una migración con las instrucciones para crear la tabla.
Sin embargo, también puedes crear migraciones para agregar, remover o cambiar columnas de una tabla, entre otros.
Creando una migración
La forma más fácil de crear una migración es desde la línea de comandos:
Continuemos con nuestro proyecto. Si seguiste los pasos puedes continuar con esa misma aplicación. De lo contrario, puedes clonar el proyecto e iniciar en la rama de este capítulo ejecutando los siguientes comandos:
Vamos a crear una migración para agregar un campo image_url
que va a contener la URL a la imagen de la cubierta del libro:
El archivo que se generaría en db/migrate
tendría lo siguiente:
Para agregar el campo debemos agregar la siguiente línea al método change
:
Por último no olvides correr la migración ejecutando:
Si la migración es de la forma "AddXXXToYYY" seguido de una lista de columnas y su tipo, la migración va a tener las instrucciones para agregar automáticamente ese o esos campos. Por ejemplo, la migración anterior la hubiesemos podido crear más fácil de la siguiente forma:
Y eso va a generar la siguiente migración:
De forma similar podemos generar una migración para remover una columna si la migración es de la forma "RemoveXXXFromYYY" (no lo hagas en el proyecto):
Al ejecutar el comando generaría la siguiente migración:
Ejecutando y reversando migraciones
Para ejecutar las migraciones pendientes ejecuta el siguiente comando en la consola:
Para reversar la última migración ejecuta el siguiente comando:
Para conocer el estado de las migraciones ejecuta:
Instrucciones
Una migración no es más que una serie de instrucciones escritas en Ruby para modificar el esquema de la base de datos.
Las instrucciones se escriben en el método change
de la migración.
Las instrucciones más comunes son: agregar una columna, remover una columna, renombrar una columna y cambiar el tipo de una columna.
Agregando una columna
Utiliza el método add_column
para agregar una columna. Como mínimo debes pasarle 3 argumentos: la tabla a la que quieres agregarle la columna, el nombre de la columna y el tipo de datos. Por ejemplo:
add_column
recibe un cuarto argumento, un hash de opciones, allí puedes pasarle otras opciones, por ejemplo:
Eliminando una columna
Utiliza el método remove_column
pasándole los mismos argumentos que add_column
. Por ejemplo:
Cambiando el nombre de una columna
Utiliza el método rename_column
para cambiar el nombre de una columna. Por ejemplo, para cambiar el nombre de la columna published_at
por published_date
:
Cambiando el tipo de datos de una columna
Para cambiar el tipo de datos y otras opciones utiliza el método change_column
. Como mínimo debes pasarle el nombre de la tabla, el nombre de la columna y el nuevo tipo. Por ejemplo:
Puedes conocer todos los métodos que puedes utilizar como instrucciones en este enlace.
Usando reversible
reversible
Todos los métodos que hemos visto hasta ahora (add_column
, remove_column
, etc.) son reversibles.
Los métodos reversibles saben cómo volver a su estado anterior en caso de que se reverse la migración con rails db:rollback
.
Algunas migraciones pueden requerir un procesamiento complejo que Active Record no sabe cómo reversar.
Puedes utilizar el método reversible
para escribir código que se va a ejecutar al migrar y reversar independientemente:
El método reversible
es útil para hacer migraciones de datos (p.e. cuando creas una nueva columna y debes actualizar todos los registros) o para ejecutar código SQL especial.
Es posible que ahora no necesites esta funcionalidad pero es bueno que sepas que existe!
Last updated