Ruby on Rails Creazione di una migrazione


Esempio

Aggiungi / rimuovi campi nelle tabelle esistenti

Crea una migrazione eseguendo:

rails generate migration AddTitleToCategories title:string

Ciò creerà una migrazione che aggiunge una colonna del title a una tabella delle categories :

class AddTitleToCategories < ActiveRecord::Migration[5.0]
  def change
    add_column :categories, :title, :string
  end
end

Allo stesso modo, è possibile generare una migrazione per rimuovere una colonna: le rails generate migration RemoveTitleFromCategories title:string

Ciò creerà una migrazione che rimuove una colonna del title dalla tabella delle categories :

class RemoveTitleFromCategories < ActiveRecord::Migration[5.0]
  def change
    remove_column :categories, :title, :string
  end
end

Mentre, in senso stretto, non è necessario specificare il tipo ( :string in questo caso) per rimuovere una colonna, è utile , poiché fornisce le informazioni necessarie per il rollback .

Crea un tavolo

Crea una migrazione eseguendo:

rails g CreateUsers name bio

Rails riconosce l'intenzione di creare una tabella dal prefisso Create , il resto del nome della migrazione verrà utilizzato come nome di tabella. L'esempio fornito genera quanto segue:

class CreateUsers < ActiveRecord::Migration
  def change
    create_table :users do |t|
      t.string :name
      t.string :bio
    end
  end
end

Si noti che il comando di creazione non ha specificato tipi di colonne e string stata utilizzata la string predefinita.

Crea una tabella di join

Crea una migrazione eseguendo:

rails g CreateJoinTableParticipation user:references group:references

Rails rileva l'intento di creare una tabella di join trovando JoinTable nel nome della migrazione. Tutto il resto è determinato dai nomi dei campi che dai dopo il nome.

class CreateJoinTableParticipation < ActiveRecord::Migration
  def change
    create_join_table :users, :groups do |t|
      # t.index [:user_id, :group_id]
      # t.index [:group_id, :user_id]
    end
  end
end

Decommentare le dichiarazioni index necessarie e cancellare il resto.

Precedenza

Si noti che il nome di migrazione di esempio CreateJoinTableParticipation corrisponde alla regola per la creazione della tabella: ha un prefisso Create . Ma non ha generato un semplice create_table . Questo perché il generatore di migrazione ( codice sorgente ) utilizza una prima corrispondenza dell'elenco seguente:

  • (Add|Remove)<ignored>(To|From)<table_name>

  • <ignored>JoinTable<ignored>

  • Create<table_name>