多 対 多のリレーションの話
プログラミングを本格的にスタートして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でコンソールを開き確認してみてください。