web-dev-qa-db-fra.com

Rails Migration avec ajout et suppression de référence

Après avoir créé un fichier de migration avec Rails generate migration AddClientToUser Je peux éditer mon fichier de migration comme ceci:

class AddClientToUser < ActiveRecord::Migration
  def self.up
    change_table :users do |t|
      t.references :client
    end
  end

  def self.down
    change_table :users do |t|
      t.remove :client_id
    end
  end
end

Est-ce la bonne façon d'inverser la colonne de référence ajoutée dans la migration?

42
Matt Connolly

c'est vrai! et vous pouvez aussi aller avec:

  def self.down
      remove_column :users, :client_id
  end
36
Daniel

Rails 4.2.1

Rails g migration RemoveClientFromUsers client:references

Générera une migration similaire:

class RemoveClientFromUser < ActiveRecord::Migration
  def change
    remove_reference :users, :client, index: true, foreign_key: true
  end
end

De plus, il est loisible d'ajouter une ou plusieurs références en ajoutant:

add_reference :users, :model_name, index: true, foreign_key: true

dans la méthode très change. Et enfin en cours d'exécution rake db:migrate après avoir enregistré les modifications apportées à la migration, produira les résultats souhaités.

29
MulleOne

Après Rails 4 vous pouvez faire ce qui suit

class AddClientToUser < ActiveRecord::Migration
  def change
    add_reference :users, :client, index: true
  end
end

Il gérera le haut et le bas pour vous, ainsi que la création d'un index de clé étrangère. Vous pouvez aussi utiliser remove_reference pour faire le contraire.

23
Ryan

Avec Rails 4, vous pouvez simplement taper:

$ Rails générer la migration client AddClientRefToUser: références

dans la console et cela fera la même chose que Ryan a dit.

2
xhenryx14