Ruby on Rails - Migraciones

Rails Migration le permite usar Ruby para definir cambios en el esquema de su base de datos, lo que hace posible usar un sistema de control de versiones para mantener las cosas sincronizadas con el código real.

Esto tiene muchos usos, que incluyen:

  • Teams of developers - Si una persona realiza un cambio de esquema, los otros desarrolladores solo necesitan actualizar y ejecutar "rake migrate".

  • Production servers - Ejecute "rake migrate" cuando lance una nueva versión para actualizar también la base de datos.

  • Multiple machines - Si desarrolla tanto en una computadora de escritorio como en una computadora portátil, o en más de una ubicación, las migraciones pueden ayudarlo a mantenerlos todos sincronizados.

¿Qué puede hacer la migración de rieles?

  • create_table (nombre, opciones)
  • drop_table(name)
  • renombrar_tabla (antiguo_nombre, nuevo_nombre)
  • add_column (nombre_tabla, nombre_columna, tipo, opciones)
  • renombrar_columna (nombre_tabla, nombre_columna, nuevo_nombre_columna)
  • change_column (nombre_tabla, nombre_columna, tipo, opciones)
  • remove_column (nombre_tabla, nombre_columna)
  • add_index (nombre_tabla, nombre_columna, tipo_índice)
  • remove_index (nombre_tabla, nombre_columna)

Migrations support all the basic data types - La siguiente es la lista de tipos de datos que admite la migración -

  • string - para tipos de datos pequeños como un título.

  • text - para piezas más extensas de datos textuales, como la descripción.

  • integer - para números enteros.

  • float - para decimales.

  • datetime and timestamp - almacena la fecha y la hora en una columna.

  • date and time - almacenar solo la fecha o solo la hora.

  • binary - para almacenar datos como imágenes, audio o películas.

  • Boolean - para almacenar valores verdaderos o falsos.

Valid column options are - La siguiente es la lista de opciones de columna válidas.

  • limit (: límite => "50")

  • default (: predeterminado => "bla")

  • null(: nulo => falso implica NO NULO )

NOTE - Las actividades realizadas por Rails Migration se pueden realizar utilizando cualquier interfaz gráfica de usuario o directamente en el indicador SQL, pero Rails Migration hace que todas esas actividades sean muy fáciles.

Consulte la API de Rails para obtener detalles sobre estos.

Crea las migraciones

Aquí está la sintaxis genérica para crear una migración:

application_dir> rails generate migration table_name

Esto creará el archivo db / migrate / 001_table_name.rb. Un archivo de migración contiene la sintaxis básica de Ruby que describe la estructura de datos de una tabla de base de datos.

NOTE - Antes de ejecutar el generador de migraciones, se recomienda limpiar las migraciones existentes generadas por los generadores de modelos.

Crearemos dos migraciones correspondientes a nuestras tres tablas - books and subjects.

La migración de libros debe ser la siguiente:

tp> cd library
library> rails generate migration books

El comando anterior genera el siguiente código.

La migración de sujetos debe ser la siguiente:

tp> cd library
library> rails generate migration subjects

El comando anterior genera el siguiente código.

Tenga en cuenta que está utilizando minúsculas para el libro y el tema y la forma plural al crear migraciones. Este es un paradigma de Rails que debe seguir cada vez que cree una migración.

Editar el código

Vaya al subdirectorio db / migrate de su aplicación y edite cada archivo uno por uno usando cualquier editor de texto simple.

Modifique 001_books.rb de la siguiente manera:

La columna de ID se creará automáticamente, así que no lo hagas aquí también.

class Books < ActiveRecord::Migration
   
   def self.up
      create_table :books do |t|
         t.column :title, :string, :limit => 32, :null => false
         t.column :price, :float
         t.column :subject_id, :integer
         t.column :description, :text
         t.column :created_at, :timestamp
      end
   end

   def self.down
      drop_table :books
   end
end

El método self.up se utiliza al migrar a una nueva versión, self.downse utiliza para revertir cualquier cambio si es necesario. En este momento, se utilizará el script anterior para crearbooks mesa.

Modifique 002_subjects.rb de la siguiente manera:

class Subjects < ActiveRecord::Migration
   def self.up
      
      create_table :subjects do |t|
         t.column :name, :string
      end
	
      Subject.create :name => "Physics"
      Subject.create :name => "Mathematics"
      Subject.create :name => "Chemistry"
      Subject.create :name => "Psychology"
      Subject.create :name => "Geography"
   end

   def self.down
      drop_table :subjects
   end
end

El script anterior se utilizará para crear subjects tabla y creará cinco registros en la tabla de materias.

Ejecute la migración

Ahora que ha creado todos los archivos de migración necesarios. Es hora de ejecutarlos contra la base de datos. Para hacer esto, vaya a un símbolo del sistema y vaya al directorio de la biblioteca en el que se encuentra la aplicación, y luego escribarake migrate como sigue -

library> rake db:migrate

Esto creará una tabla "schema_info" si no existe, que rastrea la versión actual de la base de datos; cada nueva migración será una nueva versión, y cualquier nueva migración se ejecutará hasta que su base de datos tenga la versión actual.

Rakees un programa de construcción Ruby similar al programa make de Unix que Rails aprovecha para simplificar la ejecución de tareas complejas como actualizar la estructura de una base de datos, etc.

Ejecución de migraciones para bases de datos de prueba y producción

Si desea especificar qué entorno Rails usar para la migración, use la variable de shell RAILS_ENV.

Por ejemplo

library> export RAILS_ENV = production
library> rake db:migrate
library> export RAILS_ENV = test
library> rake db:migrate
library> export RAILS_ENV = development
library> rake db:migrate

NOTE- En Windows, use "set RAILS_ENV = production" en lugar del comando de exportación .

¿Lo que sigue?

Ahora tenemos nuestra base de datos y las tablas necesarias disponibles. En los dos capítulos siguientes, exploraremos dos componentes importantes llamados Controller (ActionController) y View (ActionView).

  • Creación de controladores (controlador de acción).
  • Creación de vistas (vista de acciones).