Ruby on Rails - Migrations

Rails Migration vous permet d'utiliser Ruby pour définir les modifications de votre schéma de base de données, ce qui permet d'utiliser un système de contrôle de version pour garder les choses synchronisées avec le code réel.

Cela a de nombreuses utilisations, y compris -

  • Teams of developers - Si une personne fait un changement de schéma, les autres développeurs ont juste besoin de mettre à jour et d'exécuter "rake migrate".

  • Production servers - Exécutez "rake migrate" lorsque vous déployez une nouvelle version pour mettre également la base de données à jour.

  • Multiple machines - Si vous développez à la fois sur un ordinateur de bureau et un ordinateur portable, ou à plusieurs endroits, les migrations peuvent vous aider à les maintenir toutes synchronisées.

Que peut faire la migration Rails?

  • create_table (nom, options)
  • drop_table(name)
  • rename_table (ancien_nom, nouveau_nom)
  • add_column (nom_table, nom_colonne, type, options)
  • rename_column (nom_table, nom_colonne, nouveau_nom_colonne)
  • change_column (nom_table, nom_colonne, type, options)
  • remove_column (nom_table, nom_colonne)
  • add_index (nom_table, nom_colonne, type_index)
  • remove_index (nom_table, nom_colonne)

Migrations support all the basic data types - Voici la liste des types de données pris en charge par la migration -

  • string - pour les petits types de données comme un titre.

  • text - pour de plus longs morceaux de données textuelles, comme la description.

  • integer - pour les nombres entiers.

  • float - pour les décimales.

  • datetime and timestamp - stocker la date et l'heure dans une colonne.

  • date and time - stocker la date uniquement ou l'heure uniquement.

  • binary - pour stocker des données telles que des images, de l'audio ou des films.

  • Boolean - pour stocker des valeurs vraies ou fausses.

Valid column options are - Voici la liste des options de colonne valides.

  • limit (: limite => "50")

  • default (: default => "bla")

  • null(: null => false implique NOT NULL )

NOTE - Les activités effectuées par Rails Migration peuvent être effectuées à l'aide de n'importe quelle interface graphique frontale ou directement sur l'invite SQL, mais Rails Migration rend toutes ces activités très faciles.

Consultez l' API Rails pour plus de détails à ce sujet.

Créer les migrations

Voici la syntaxe générique pour créer une migration -

application_dir> rails generate migration table_name

Cela créera le fichier db / migrate / 001_table_name.rb. Un fichier de migration contient la syntaxe Ruby de base qui décrit la structure de données d'une table de base de données.

NOTE - Avant d'exécuter le générateur de migration, il est recommandé de nettoyer les migrations existantes générées par les générateurs de modèles.

Nous allons créer deux migrations correspondant à nos trois tables - books and subjects.

La migration des livres doit être la suivante -

tp> cd library
library> rails generate migration books

La commande ci-dessus génère le code suivant.

la migration des sujets devrait être la suivante -

tp> cd library
library> rails generate migration subjects

La commande ci-dessus génère le code suivant.

Notez que vous utilisez des minuscules pour le livre, le sujet et le pluriel lors de la création de migrations. Il s'agit d'un paradigme Rails que vous devez suivre chaque fois que vous créez une migration.

Modifier le code

Accédez au sous-répertoire db / migrate de votre application et modifiez chaque fichier un par un à l'aide d'un simple éditeur de texte.

Modifiez 001_books.rb comme suit -

La colonne ID sera créée automatiquement, alors ne le faites pas ici également.

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

La méthode self.up est utilisé lors de la migration vers une nouvelle version, self.downest utilisé pour annuler les modifications si nécessaire. À ce moment, le script ci-dessus sera utilisé pour créerbooks table.

Modifiez 002_subjects.rb comme suit -

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

Le script ci-dessus sera utilisé pour créer subjects table et créera cinq enregistrements dans la table des sujets.

Exécutez la migration

Maintenant que vous avez créé tous les fichiers de migration requis. Il est temps de les exécuter sur la base de données. Pour ce faire, accédez à une invite de commande et accédez au répertoire de la bibliothèque dans lequel se trouve l'application, puis tapezrake migrate comme suit -

library> rake db:migrate

Cela créera une table "schema_info" si elle n'existe pas, qui suit la version actuelle de la base de données - chaque nouvelle migration sera une nouvelle version et toutes les nouvelles migrations seront exécutées jusqu'à ce que votre base de données soit à la version actuelle.

Rakeest un programme de construction Ruby similaire au programme Unix make dont Rails tire parti, pour simplifier l'exécution de tâches complexes telles que la mise à jour de la structure d'une base de données, etc.

Exécution de migrations pour les bases de données de production et de test

Si vous souhaitez spécifier l'environnement Rails à utiliser pour la migration, utilisez la variable shell RAILS_ENV.

Par exemple -

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- Sous Windows, utilisez "set RAILS_ENV = production" au lieu de la commande d' exportation .

Quelle est la prochaine?

Nous avons maintenant notre base de données et les tables requises disponibles. Dans les deux chapitres suivants, nous explorerons deux composants importants appelés Controller (ActionController) et View (ActionView).

  • Création de contrôleurs (contrôleur d'action).
  • Création de vues (vue Action).