Rails 4.x
Lorsque vous avez déjà users et les uploadstables 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 uploadstable (référençant la idcolonne dans la userstable), 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_idcolonne de la uploadstable. La clé fait référence à la idcolonne du userstableau.
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, mysql2et les PostgreSQLadaptateurs 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.