多 対 多のリレーションの話

プログラミングを本格的にスタートして3ヶ月目に入りましたさかもとです。

今回は多 対 多のリレーションの実装!という話をアウトプットしようと思います。

 

多 対 多 とは

 

本来、1対多の実装を行う際は親となる側にhas meny、子となる側にbelongs_to

を付与することで1対多を実現することができます。

しかし多 対 多の場合はそうは行きません。

なぜならどちらも親であり、子でもあるからです。

この関係を実装するために大切なのが今回のキーワードになる” 中間テーブル "の作成です!

 

中間テーブルを用いて実装

 

例えば著者(auther)と本(book)モデルがそれぞれあるとします。

著者は沢山本を書きますし、本も様々な著者によって作成されます。

この著者と本は多 対 多の関係にあります。

ここでこの関係を成立させるためにすることは

1. auther.rb, book.rb, book_auther.rb(中間テーブル)の作成

2. auther.rb, book.rb にhas_menyとthroughでbook_authersに関連づけ

3. book_authersにはbelongs_toで関連付け2つのモデルを指定

この3点です。

実際に行います。

 

auther.rb

has_many :book_authers

has_many :books, through: :book_authers

 

book.rb

has_many :book_authers

has_many :authers, through: :book_authers

 

book_auther.rb

belongs_to :auther

belongs_to :book

 

これで実装は完了です。

実際に活用できるかどうかはrails cでコンソールを開き確認してみてください。