Ruby on rails “多个”与同一类有许多关系

Ruby on rails “多个”与同一类有许多关系,ruby-on-rails,activerecord,has-many,Ruby On Rails,Activerecord,Has Many,我正在建立一个足球比赛,我在创建俱乐部和比赛课程时遇到了困难。我希望能够做到这一点: match = Match.find(2) match.home_club = <some club here> match.away_club = <other club here> 这就是我现在拥有的: class Club < ActiveRecord::Base has_many :matches end class Match < ActiveRecord:

我正在建立一个足球比赛,我在创建俱乐部和比赛课程时遇到了困难。我希望能够做到这一点:

match = Match.find(2)
match.home_club = <some club here>
match.away_club = <other club here>
这就是我现在拥有的:

class Club < ActiveRecord::Base
  has_many :matches
end

class Match < ActiveRecord::Base
  belongs_to :home_club, :class_name => "Club"
  belongs_to :away_club, :class_name => "Club"
end
我一直在玩
:与
相反的东西,但我没有让它工作。这样可能吗,或者我需要有两个独立的
:俱乐部里有很多关系吗?像这样:

class Club < ActiveRecord::Base
  has_many :home_matches, :class_name => "Match"
  has_many :away_matches, :class_name => "Match"
end
class Club“匹配”
有很多:客场比赛,:class\u name=>“比赛”
终止

我也试过了,但也没用。

您正在建立多对多关系,因此需要一个链接表。该表存储这些关系,而不是在任何一个实体表中都有外键,并且应该只有一个match_id和一个club_id来关联这两个表。然后您可以使用

class Club < ActiveRecord::Base
    has_many :matches, :through => :matches_clubs
end
class Club:比赛\u俱乐部
终止
等等

在这里看到更多

您是否将模式中的关系定义为
主场俱乐部id
客场俱乐部id
?因为rails似乎正试图获得
匹配的.club_id
,这显然与您需要的模型相冲突

我认为你的模型是错误的,应该修改一下。 俱乐部不应该有
比赛id

比赛内容应为:

  • 家庭俱乐部id
  • 客场俱乐部
  • 时间
  • 得分
俱乐部应:

  • 名字
  • 城市
我想如果你把这些东西从俱乐部里拿走,你会没事的

如果您希望能够进行
俱乐部比赛

您可能需要编写一个自定义sql查询,该查询同时在home\u club和away\u club列中查找。或者为clubs->match创建一个关系表,其中有一个额外的元字段,说明俱乐部是主场还是客场。虽然你的比赛表中有主客场球杆

这将允许我进行
比赛。球杆
,但不允许
比赛。主客场球杆
比赛。客场球杆
。这种关系不是真正的n-m关系,是吗?很明显是2-n,我想这不是一个正常的关系,但是一个仅用于关系的表有点多?这是一个相当标准的模式。然后还可以在链接表中添加有关匹配的各种信息。在家还是在外。他们那天穿什么颜色的衣服。这就是说,如果每场比赛总是只有两个俱乐部,那么多个外键可能会更敏感,它们被定义为
主场俱乐部id
客场俱乐部id
。当我访问
home\u club
时,如何让Rails查找
home\u club\u id
?有一个:客场俱乐部,:class\u name=>“club”,:foreign\u key=>:客场俱乐部id你解决过这个问题吗?谢谢。你把这个问题解决了吗?
class Club < ActiveRecord::Base
  has_many :home_matches, :class_name => "Match"
  has_many :away_matches, :class_name => "Match"
end
class Club < ActiveRecord::Base
    has_many :matches, :through => :matches_clubs
end