当我们处理两个不同的数据库表时,Rails' ActiveRecord类允许我们使用has_many :through
关联在它们之间建立多对多关联。如果我想在单个表上创建多对多关联怎么办? ActiveRecord是否提供了一种特殊的机制,还是我们必须发明其他东西?
作为一个例子,想想一个足球队的表格,并且每个球队之间的比赛就是联想。
例如,我可以使用两个字段创建第二个表格:team1_id
和team2_id
以及其他必填字段。但我想知道是否有一个众所周知的Rails编码器广泛接受的技术来实现这种关联。
答案 0 :(得分:1)
<强>自连接强>
docs中有关于自连接的部分:
class Employee < ActiveRecord::Base
has_many :subordinates, class_name: "Employee",
foreign_key: "manager_id"
belongs_to :manager, class_name: "Employee"
end
但在您的(示例)案例中,您不想使用此技术,因为它会导致类似以下的模型:
class Team < ActiveRecord::Base
has_many :opponents, class_name: "Team", foreign_key: "opponent_id"
belongs_to :opponent, class_name: "Team"
end
没有多大意义。属于另一个团队的团队?一支球队只能有一名对手?
<强>结论强>
对于您的示例,最好使用has_many :through
多对多关联,因此所有团队都可以拥有无限的对手,您可以在match_date
或{{1}这样的关系中存储额外的属性}}