Una migrazione è un file Ruby che descrive una modifica allo schema del database. È versionata, reversibile e condivisa col team: il "git" della struttura dati.
class CreateLaunches < ActiveRecord::Migration[7.1]
def change
create_table :launches do |t|
t.string :name, null: false
t.string :provider
t.datetime :net # No Earlier Than
t.timestamps
end
add_index :launches, :provider
end
end
Lanci rails db:migrate e la tabella nasce; rails db:rollback la annulla. Il metodo change è abbastanza intelligente da sapere come invertire la maggior parte delle operazioni.
La regola: mai modificare una migrazione già eseguita in produzione. Ne crei una nuova. Lo storico deve restare fedele a ciò che è successo davvero.