has_one と belongs_to、どっちがどっち ?
Rails で 1 対多の関係を示すときは 1 の方に has_many
、他の方に belongs_to
をつければよいのでわかりやすいのだが、1 対 1 のときはどっちが has_one
でどっちが belongs_to
なのか混乱することがままある。その場合は「主従関係」を考えてみるといい。主となる方が has_one
で従となる方が belongs_to
になる。
以前紹介した政令指定都市アプリの場合、「政令指定都市(City
)がない地方(District
)は存在するが、どの地方にも属さない政令指定都市はあり得ない」ので District
が主で City
は従になる。((ただし、例のアプリでは District
の側から City
を参照することがないので、City
にだけ belongs_to
を付けている。このように一方向の関係である場合は has_one
or has_many
と belongs_to
を必ずしもセットにしなくても良い。))