【Rails】テーブルに外部キー制約のついたカラムを追加する方法

Rails

既に存在するテーブルに後から外部キーを追加する方法

前提として、以下のstudentsテーブルとhigh_schoolsテーブルがあり、「どの生徒がどの高校に所属しているか」を明確にするために、studentsテーブルにhigh_school_idという外部キー制約が付与されたカラムを追加していきます。

idnameagegenderaddresscreated_atupdated_at
1田中圭17male東京都2022-02-062022-02-06
2加藤麻衣子16female埼玉県2022-02-062022-02-06
studentsテーブル
idnamelocationyear_of_establishmentis_public_schoolcreated_atupdated_at
1新宿総合高校東京都1987true2022-02-062022-02-06
2大宮学園高校埼玉県1959false2022-02-062022-02-06
high_schoolsテーブル

まずは、外部キーカラムを追加するためのマイグレーションファイルを作成します。

$ rails g migration AddHighSchoolId

すると、新しくマイグレーションファイルが作られるので、以下の形式で記述します。

def change
  add_reference :外部キーを追加するテーブル名(複数形), :外部キー参照先テーブル名(単数型), foreign_key: true
end

単にカラムを追加したい場合は、add_columnを使用しますが、
外部キーカラムを追加する場合は、add_referenceを使用します。

今回の例だと、studentsテーブルにhigh_schoolsの外部キーを持たせたいので、このように書きます。

class AddHighSchoolId < ActiveRecord::Migration[6.1]
  def change
    add_reference :students, :high_school, foreign_key: true
  end
end

あとは、以下のコマンドを実行してマイグレーションファイルの内容をDBに反映させればOKです。

$ rails db:migrate

結果は、studentsテーブルにhigh_school_idというカラムが追加され、high_schoolsテーブルのレコードのidを格納することができるようになりました。

idnameagegenderaddresscreated_atupdated_athigh_school_id
1田中圭17male東京都2022-02-062022-02-06
2加藤麻衣子16female埼玉県2022-02-062022-02-06
studentsテーブル
タイトルとURLをコピーしました