在Rails中的单个表上有很多对很多

时间:2014-04-29 14:05:22

标签: ruby-on-rails activerecord

当我们处理两个不同的数据库表时,Rails' ActiveRecord类允许我们使用has_many :through关联在它们之间建立多对多关联。如果我想在单个表上创建多对多关联怎么办? ActiveRecord是否提供了一种特殊的机制,还是我们必须发明其他东西?

作为一个例子,想想一个足球队的表格,并且每个球队之间的比赛就是联想。

例如,我可以使用两个字段创建第二个表格:team1_idteam2_id以及其他必填字段。但我想知道是否有一个众所周知的Rails编码器广泛接受的技术来实现这种关联。

1 个答案:

答案 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}这样的关系中存储额外的属性}}