多対多の関連
- 多対多の関連をDBで表現するには、関連のあるテーブルにちょJavaScript苦節外部キーを定義するのではなく、両者への外部キーを持った結合テーブルを用意する
- Railsでは、このような関連を表現する方法として、has_many :through宣言と、has_and_belongs_to_many宣言という2種類の仕組みが用意されている
has_many :through
- 結合テーブルを介して1対多のテーブルがあるかのような扱い
- 結合テーブルテーブルを介しての参照(select, find)はできるが、ActiveRecordはそれ以上の面倒は見てくれない
- 結合テーブルには任意のカラムが持てる
- 使用頻度はこちらの方が多い
has_many :through宣言をして多対多の関連を定義する手順
- 結合テーブルを作成
- 結合テーブルに対応するモデルクラスから、両クラスへのbelongs_to宣言をする
- 多対多の関連を持つ双方のクラスでhas_many :through宣言をする
has_and_belongs_to_many(略してhabtm)
- 結合テーブルの面倒は全てActiveRecordが見てくれる
- 結合テーブルには2つのテーブルのid以外のカラムを持てない
- 単純に多対多を実現したい場合はこの方式が便利
■参考