ActiveRecordのアソシエーションについて
ActiveRecord(以下、AR)の関連について、直感的なようで直感的でない感じがしていて、どうもあいまいな理解になっていたので、頭の中を整理してみました。
結論から言うと、次のようなルールで整理できました。(ルールは上から順に適用し、マッチしたら終わる)
- 多:多のカーディナリティは、has_and_belongs_to_many
- FKで参照する側のARから他のARに関連させたい場合は、必ずbelongs_to。
- FKを持っているということは、その関連先は必ず1つなので、belongs_toの1種類の定義だけすればよい。
- 自身を左とすると、多:1 または、1:1のどちらかになる。
- 気持ち的に、has_oneとしたくとも、belongs_toにしなければならないのがARの作法。
- FKで参照される側のARから他のARに関連させたい場合は、has_oneまたは、has_many。
- FKを持っていないということは、その関連先が1なのか多なのかわからないので、ARを作るときに1:多の場合はhas_many、1:1の場合はhas_oneを判断して定義する。
これが、整理された状態かどうかは、個人的にもやや不安は残りますが、ひとまずメモっておきます。