[RUBY] Ajouter une clé externe à la colonne avec migrate

Je voudrais écrire du contenu que même les débutants peuvent comprendre.

Organisez comment ajouter des clés externes aux colonnes pour l'association de modèles lors de la migration avec des rails.

Le principe est que vous souhaitez associer un utilisateur à plusieurs tweets de cet utilisateur.

◉ Ajouter une clé externe à la table

Pour ce faire, ajoutez une colonne appelée user_id à la table des tweets nouvellement créée pour stocker l'id de l'utilisateur propriétaire de la publication.

Dans ce cas, ajoutez une colonne pour la clé externe à l'aide d'un type de données appelé référence.

Écrivez le fichier de migration qui crée la table des tweets comme ceci.

class CreateTweets < ActiveRecord::Migration[5.2]
 def change
   create_table :tweets do |t|
     t.string     :text,                     null: false
     t.references :user, foreign_key: true,  null: false

     t.timestamps
   end
 end
end

t.references: utilisateur, clé étrangère: true Ici même.

t.referencees: l'utilisateur créera une colonne appelée user_id. Et l'index est automatiquement attribué. L'index facilite la recherche.

Cependant, il semble qu'il y ait un inconvénient à ce que la vitesse d'écriture devienne plus lente au prix de l'avantage que la lecture et l'acquisition des données deviennent plus rapides.

Avec cela seul, il n'y a pas de contrainte de clé externe, donc

Foreign_key: ajoutez true.

De plus, si vous souhaitez ajouter une clé externe à une table existante:

class AddColumn < ActiveRecord::Migration[5.0]
 def change
   add_reference :tweets, :user, foreign_key: true
 end
end

Au fait, ...

Vous pouvez ajouter une contrainte NOT NULL en écrivant null: false. Mettez cette contrainte lorsque vous ne souhaitez pas stocker NULL dans la valeur d'une colonne de base de données, c'est-à-dire lorsque vous vous attendez à ce que la valeur d'un attribut d'un modèle soit incluse.

Recommended Posts

Ajouter une clé externe à la colonne avec migrate
[Ruby on Rails] Ajouter une colonne avec des contraintes de clé externe
Comment supprimer des données avec une clé externe
[Rails] Ajouter une colonne à concevoir
Comment renommer un modèle avec des contraintes de clé externes dans Rails
Ajouter un script à la distribution créée par gradle
Essayez d'obtenir la clé API de redmine avec ruby
[Java] Article pour ajouter une validation avec Spring Boot 2.3.1.
Ajoutez des packages à votre projet avec Swift PM
Changez la clé primaire de la base de données (MySQL) sur n'importe quelle colonne.
Ajouter un fichier au fichier jar
Migrer de JUnit 4 vers JUnit 5
Ajoutez un package Swift local à votre projet avec Swift PM
[Rails] Comment écrire user_id (clé externe) dans un paramètre fort