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_manybelongs_to を必ずしもセットにしなくても良い。))