はじめに
二つのテーブルを関連づけるために、外部キーをテーブルに追加することがあります。
今回は、やることリストのアプリを例に取り、ユーザーテーブルとやること(mission)テーブルを関連づけたい場合を前提に説明します。
外部キー制約をつけると、missionsテーブルにuser_idというカラムが追加され、やることの親元であるユーザーのidを入れることができます。
外部キーをつけたテーブルを作成
まずはmissionテーブルを作成するため、以下のコマンドをターミナルで実行します。
rails g model Mission content:string date:date
マイグレーションファイルが作成されるので、以下のように編集します。
class CreateMissions < ActiveRecord::Migration[6.1]
def change
create_table :missions do |t|
t.string :content
t.date :date
t.references :user, foreign_key: true #追記
t.timestamps
end
end
end
データ型はreferences型を使用して、「:user」でuser_idを追加します。
後ろにforeign_key: trueをつけることで外部キーが追加されます。
最後に以下のコマンドで、データベースに反映させます。
rails db:migrate
既存のテーブルに外部キーをつける
既存のテーブルに外部キーをつけたい場合は、まず以下のコマンドでカラム追加のマイグレーションファイルを作成します。
rails g migration AddColumnToMissions
作成したら、以下のように編集します。
class AddColumnToMissions < ActiveRecord::Migration[6.1]
def change
add_reference :missions, :user, foreign_key: true
end
end
add_referenceの後に、追加したいテーブル(:missions)、入れたいidを持つテーブル(:user)、foreign_key: trueというように記述します。
最後にマイグレートして完了です。
rails db:migrate