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?
c'est vrai! et vous pouvez aussi aller avec:
def self.down
remove_column :users, :client_id
end
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.
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.
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.