中間テーブルについて、
中間テーブルとは
多対多の関係では、アソシエーションを組むことができないため、
中間にもう一つテーブルを設けて、アソシエーションを組むというもの。
例えば、
部屋はひとつだけど、そこを利用する人はたくさんいる。
これは部屋が単一に対して、人が多数いるというhas_manyの関係
例えば、
この記事は僕が書いたもの。
つまりこの記事は僕に帰属するので、一対一のbelongs_toの関係。
では、多対多の関係はどうするのか。
例えば、ラインのオープンチャットなんかは、
たくさんのチャットルームがあって、
たくさんのユーザーが利用する。
こういった時に、
ユーザーテーブルとチャットルームのテーブル、二つの中間テーブルを作る。
具体的には、ユーザーテーブルにあるユーザーIDとチャットルームにあるチャットIDを中間テーブルに記憶しておくことができる。
では中間テーブルと他のテーブルをつなぐ時は?
こういう時には
Reference型という中間テーブル用のカラムの書き方があって、
referencesとは、他テーブルから情報を参照する際に用いる型です。
中間テーブルと他のテーブルとのアソシエーションを組む時に使用します。
これを使用することで、foreign_key: true という外部キーの制約をつけることができ、エラーが起きない仕組みにすることができます。
これは何かというと、両方のIDがないとデータベースに保存できませんよという制約になります。
制約をつけることで、正しく中間テーブルの情報を保持できるので、エラーすることなく他のテーブルとのアソシエーションを組むことができる。