Rails中has_one和belongs_to之间的区别?
我想了解RoR中的has_one
关系。
比方说,我有两个模型 – Person
和Cell
:
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.