belongs_to和has_one有什么区别?
 belongs_to和has_one什么区别? 
阅读Ruby on Rails指南并没有帮助我。
 他们基本上做同样的事情,唯一的区别就是你所处的关系的哪一方面。 如果一个User有一个Profile ,那么在User类中你会有has_one :profile而在Profile类中你将拥有belongs_to :user 。 要确定谁拥有另一个对象,请查看外键的位置。 我们可以说User “有”一个Profile因为profiles表有一个user_id列。 如果users表中有一个名为profile_id的列,我们可以说一个Profile有一个User ,并且belongs_to / has_one位置将被交换。 
这里是一个更详细的解释。
这是关于外键在哪里。
 class Foo < AR:Base end 
-  如果foo belongs_to :bar,那么foos表有一个bar_id列
-  如果foo has_one :bar,那么bars表有一个foo_id列
 在概念层面上,如果你的class A与class B有一个has_one关系,那么class A是class B的父class B因此你的class B与class A有一个belongs_to关系,因为它是class A的子class A 。 
 两者都expression了1-1的关系。 差异主要在于放置外键的位置,该外键位于声明belongs_to关系的类的表格中。 
 class User < ActiveRecord::Base # I reference an account. belongs_to :account end class Account < ActiveRecord::Base # One user references me. has_one :user end 
这些类的表格可能如下所示:
 CREATE TABLE users ( id int(11) NOT NULL auto_increment, account_id int(11) default NULL, name varchar default NULL, PRIMARY KEY (id) ) CREATE TABLE accounts ( id int(11) NOT NULL auto_increment, name varchar default NULL, PRIMARY KEY (id) ) 
  has_one和belongs_to在某种意义上大体相同,即指向其他相关模型。  belongs_to确保此模型具有foreign_key定义。  has_one确保其他模型has_foreign键定义。 
 具体而言, relationship有两个方面,一个是Owner ,另一个是Belongings 。 如果只有has_one被定义,我们可以得到它的belongings但不能从belongings获得Owner 。 为了追踪Owner我们需要在所属模型中定义belongs_to 。