Tous les guides
Intermédiaire-AvancéÀ votre rythmeGuide gratuitSection 12/33

Migrations et Active Record ORM

Apprenez à construire et vérifier une application web avec des outils de développement et des assistants IA. Pratiquez les étapes de conception, code et validation.

💡

Contenu gratuit, accessible sans compte. Les outils et modèles évoluent : consultez le dossier actuel pour vérifier leurs versions. Modèles et sources

Section 13.3.2 : Migrations et Active Record ORM

🎯 Objectif pédagogique

Comprendre Active Record, l'ORM de Rails qui transforme vos tables SQL en classes Ruby. Apprendre à créer et gérer des migrations pour faire évoluer votre schéma de base de données.


Qu'est-ce qu'un ORM ?

Un ORM (Object-Relational Mapping) fait le pont entre le monde objet (Ruby) et le monde relationnel (SQL). Au lieu d'écrire du SQL brut, vous manipulez des objets Ruby qui correspondent à des tables de la base de données.

# SANS ORM (SQL brut)
db.execute("SELECT * FROM users WHERE age > 25 ORDER BY name")

# AVEC Active Record (Ruby)
User.where('age > ?', 25).order(:name)

# Les deux produisent le même résultat SQL !

Les migrations : versionner votre base

Les migrations sont des fichiers Ruby qui décrivent les modifications de votre schéma de base. Elles permettent de versionner la structure de la DB comme vous versionnez votre code avec Git.

# Générer une migration
rails generate migration CreateUsers nom:string email:string age:integer

# Générer un model (crée le model ET la migration)
rails generate model User nom:string email:string age:integer
# db/migrate/20240315_create_users.rb
class CreateUsers < ActiveRecord::Migration[7.1]
  def change
    create_table :users do |t|
      t.string :nom, null: false
      t.string :email, null: false
      t.integer :age
      t.string :ville, default: 'Paris'
      t.timestamps  # created_at et updated_at automatiques
    end

    add_index :users, :email, unique: true
  end
end
# Exécuter les migrations
rails db:migrate

# Annuler la dernière migration
rails db:rollback

# Voir le statut
rails db:migrate:status

Ajouter/modifier des colonnes

# Ajouter une colonne
class AddBioToUsers < ActiveRecord::Migration[7.1]
  def change
    add_column :users, :bio, :text
    add_column :users, :avatar_url, :string
  end
end

# Supprimer une colonne
class RemoveVilleFromUsers < ActiveRecord::Migration[7.1]
  def change
    remove_column :users, :ville, :string
  end
end

# Renommer une colonne
class RenameNomToUsername < ActiveRecord::Migration[7.1]
  def change
    rename_column :users, :nom, :username
  end
end

CRUD avec Active Record

# CREATE
user = User.new(nom: 'Alice', email: 'alice@test.com', age: 28)
user.save

# Raccourci
user = User.create(nom: 'Bob', email: 'bob@test.com', age: 32)

# READ
User.all                          # Tous les utilisateurs
User.find(1)                      # Par ID (lève une erreur si absent)
User.find_by(email: 'alice@test.com')  # Par attribut (nil si absent)
User.where(ville: 'Paris')        # Collection filtrée
User.where('age > ?', 25)         # Avec condition SQL
User.order(age: :desc)            # Tri
User.limit(10).offset(20)         # Pagination
User.count                        # Nombre total
User.first                        # Premier
User.last                         # Dernier

# UPDATE
user = User.find(1)
user.update(age: 29)

# ou
user.nom = 'Alice Martin'
user.save

# DELETE
user.destroy
User.destroy_all                  # Tout supprimer

Requêtes avancées Active Record

# Chaîner les requêtes
User.where(ville: 'Paris')
    .where('age > ?', 25)
    .order(nom: :asc)
    .limit(10)

# Agrégation
User.average(:age)               # Âge moyen
User.maximum(:age)               # Âge max
User.minimum(:age)               # Âge min
User.count                       # Nombre total
User.group(:ville).count         # Compter par ville

# Pluck (récupérer une seule colonne)
User.pluck(:email)               # ['alice@test.com', 'bob@test.com']

# Exists?
User.exists?(email: 'alice@test.com')  # true
Loading diagram…
Vérification rapide

En Rails, quelle convention lie le model User à quelle table ?

Apprendre l’IA, du premier prompt aux agents

15 guides gratuitsQuiz, schémas et ateliersSans compte

Votre progression

Cette progression est déclarative et conservée dans votre navigateur. L’attestation finale ne constitue pas un diplôme ni une évaluation indépendante.

Voir ma progression et mon attestation

Apprendre l’IA, du premier prompt aux agents

15 guides gratuitsQuiz, schémas et ateliersSans compte

Un cas pratique IA dans votre boîte mail

Méthodes, ressources et nouveaux exercices. Gratuit, avec désinscription à tout moment.