Rails中has_one和belongs_to之间的区别?

我想了解RoR中的has_one关系。

比方说,我有两个模型 – PersonCell

 class Person < ActiveRecord::Base has_one :cell end class Cell < ActiveRecord::Base belongs_to :person end 

我可以在Cell模型中使用has_one :person而不是belongs_to :person吗?

不一样吗?

不,它们不可互换,而且有一些真正的差异。

belongs_to表示外键在这个类的表中。 所以belongs_to只能进入持有外键的类。

has_one意味着在另一个表中有一个引用这个类的外键。 所以has_one只能进入另一个表中的列引用的类。

所以这是错误的:

 class Person < ActiveRecord::Base has_one :cell # the cell table has a person_id end class Cell < ActiveRecord::Base has_one :person # the person table has a cell_id end 

那么这是:

 class Person < ActiveRecord::Base belongs_to :cell # the person table has a cell_id end class Cell < ActiveRecord::Base belongs_to :person # the cell table has a person_id end 

对于一个双向的协会,你需要每一个协会,他们必须进入正确的课堂。 即使是单向联系,你使用哪一个也是重要的。

如果你添加“belongs_to”,那么你有一个双向的关联。 这意味着你可以从小区中获得一个人,从小区中获得一个小区。

没有真正的区别,两种方法(有或没有“belongs_to”)使用相同的数据库模式(单元数据库表中的person_id字段)。

总结:除非需要模型之间的双向关联,否则不要添加“belongs_to”。

使用两者都可以让您从Person和Cell模型中获取信息。

 @cell.person.whatever_info and @person.cell.whatever_info.