LoginSignup
0
0

More than 3 years have passed since last update.

二つのテーブルを繋ぐ存在、中間テーブル

Posted at

中間テーブルとは

 二つのアソシエーションしたいテーブル同士が「多対多」の関係のときに、テーブルの間を受け持つ、便利なやつ。

具体例

 LINEを思い浮かべると、一人のユーザーはいくつものグループに所属している。また、一つのグループには、何人ものユーザーが招待されている。このとき、ユーザーとグループは「多対多」の関係と言える。

問題点

 「多対多」のテーブルをそのままアソシエーションすることが困難である。

解決策

 先の例で言えば、ユーザーとグループの間に組み合わせを記録するテーブルをかませる。それが、中間テーブル。ユーザーとグループの組み合わせを記録するというのがポイントで、カラムにはユーザーidとグループidが必要となる。

記述

 アソシエーションをするため、「has_manyメソッド」「belongs_toメソッド」を使う。
 そのモデル(テーブル)ファイルの目線になって、繋がりを持ちたいモデル(テーブル)にはが複数か単数か考える。
ex) user(モデル) has_many groups
ここは、もはや英語の話。

group.rb
has_many :user_groups
has_many :users, through: :user_groups
user.rb
has_many :user_groups
has_many :groups, through: :user_groups
user_group.rb
belongs_to :user
belongs_to :group

注意

 直接的に繋がっていないモデルには、「throughオプション」を使う。

ポイント

  • 中間テーブルは必ず「belongs_toメソッド」で、後に続くモデル名は単数形。
  • アソシエーションしたいテーブル同士は間接的に多対多の関係になる。
  • 中間テーブルではないテーブルは必ず「has_manyメソッド」で、後に続くモデル名は複数形。
  • 「throughオプション」を使って、経由しているモデル名を複数形で記述。

最後に

 人生で初めてQiitaに投稿します。自分のアウトプットを目的としていますが、お気づきの点があれば、ご指摘ください。

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