Rails 4.x
Lorsque vous avez déjà users
et les uploads
tables et que vous souhaitez ajouter une nouvelle relation entre eux.
Tout ce que vous devez faire est de: générer simplement une migration à l'aide de la commande suivante:
rails g migration AddUserToUploads user:references
Ce qui créera un fichier de migration comme:
class AddUserToUploads < ActiveRecord::Migration
def change
add_reference :uploads, :user, index: true
end
end
Exécutez ensuite la migration à l'aide de rake db:migrate
. Cette migration se chargera d'ajouter une nouvelle colonne nommée user_id
à la uploads
table (référençant la id
colonne dans la users
table), PLUS elle ajoutera également un index sur la nouvelle colonne.
MISE À JOUR [Pour Rails 4.2]
On ne peut pas faire confiance aux rails pour maintenir l'intégrité référentielle; les bases de données relationnelles viennent à notre secours ici. Cela signifie que nous pouvons ajouter des contraintes de clé étrangère au niveau de la base de données elle-même et garantir que la base de données rejettera toute opération qui viole cette intégrité référentielle définie. Comme l'a commenté @infoget, Rails 4.2 est livré avec une prise en charge native des clés étrangères (intégrité référentielle) . Ce n'est pas obligatoire mais vous voudrez peut-être ajouter une clé étrangère (car c'est très utile) à la référence que nous avons créée ci-dessus.
Pour ajouter une clé étrangère à une référence existante , créez une nouvelle migration pour ajouter une clé étrangère:
class AddForeignKeyToUploads < ActiveRecord::Migration
def change
add_foreign_key :uploads, :users
end
end
Pour créer une toute nouvelle référence avec une clé étrangère (dans Rails 4.2) , générez une migration à l'aide de la commande suivante:
rails g migration AddUserToUploads user:references
qui va créer un fichier de migration comme:
class AddUserToUploads < ActiveRecord::Migration
def change
add_reference :uploads, :user, index: true
add_foreign_key :uploads, :users
end
end
Cela ajoutera une nouvelle clé étrangère à la user_id
colonne de la uploads
table. La clé fait référence à la id
colonne du users
tableau.
REMARQUE: cela s'ajoute à l'ajout d'une référence, vous devez donc toujours créer une référence, puis une clé étrangère ( vous pouvez choisir de créer une clé étrangère dans la même migration ou dans un fichier de migration distinct ). L'enregistrement actif prend uniquement en charge les clés étrangères à colonne unique et actuellement uniquement mysql
, mysql2
et les PostgreSQL
adaptateurs sont pris en charge. N'essayez pas ceci avec d'autres adaptateurs comme sqlite3
, etc. Référez-vous aux guides de rails: clés étrangères pour votre référence.