0
0

【Rails】外部キーの作成に便利?reference型とは?

Last updated at Posted at 2024-02-06

こんにちは!
今回はテーブル作成時に使用するカラムreference型について紹介します!

reference型を使う時はいつ?

 外部キー(FK, foreign keyともいう)を作成したいとき、integer型を用いてt.integer: xxx_idと単純に作ることもできますが、下の例のようにreference型を使うこともできます。

XXXX_create_xxxx.rb
t.references: user, foreign_key: true
t.references: group, foreign_key: true

このように用いますが、reference型を知らない方は、あれ?外部キーを作るのにカラム名に_idが抜けてる?となると思います。
実は、reference型はマイグレーションファイル上ではuserやgroupとしか表示されて
いませんが、 rails db:migrate後にuser_id、group_idのように自動で外部キーのカラムが作成されるという特徴があります。

外部キー制約が必要!!

しかし、ターミナルでモデルを作成後はまだ外部キーとしての機能はありません。そこで、外部キー制約をマイグレーションファイル上に記述することで、rails db:migrate後に外部キーとして機能します。
上の例だと外部キー制約はforeign_key: trueの部分にあたります。
reference型を使って外部キーを作成する際は必ず外部キー制約の記述を忘れないようにしましょう!

ちなみに、add_foreign_keyとして記述することも可能

先ほどのカラム名の後ろではなく、まとめて書いても大丈夫です!

class CreateGroupUsers < ActiveRecord::Migration[6.1]
 def change
   create_table :group_users do |t|
     t.references :user
     t.references :group
     t.timestamps
   end
   add_foreign_key :user, :group
 end
end

参考させていただいた記事はこちらです!

余談

ちなみに、中間テーブルが必要になったときはこのような書き方(reference型)が便利です!
中間テーブルが必要になるときというのは、繋げたいテーブルがどちら側からみても1:Nの関係にあるときで、テーブル同士の関係はN:M(多:多)となるときです。中間テーブルに2つのテーブルの外部キーを持たせることで、2つのテーブルが関係性をもったときにそのテーブルどうしの繋がりがどのようになっているか分かりやすく、管理も容易になります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0