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を判断して定義する。

これが、整理された状態かどうかは、個人的にもやや不安は残りますが、ひとまずメモっておきます。