Ruby on rails 有很多:在铁轨上。能给我两把外键吗?

Ruby on rails 有很多:在铁轨上。能给我两把外键吗?,ruby-on-rails,ruby,Ruby On Rails,Ruby,我是一名rails新手,我正在尝试创建一个如下所示的数据库模式: class Game < ActiveRecord::Base belongs_to :home_team, :class_name => 'Team', :foreign_key => 'team1_id' belongs_to :visitor_team, :class_name => 'Team', :foreign_key => 'team2_id' 有很多比赛。每场比赛有两队 一个

我是一名rails新手,我正在尝试创建一个如下所示的数据库模式:

class Game < ActiveRecord::Base
  belongs_to :home_team, :class_name => 'Team', :foreign_key => 'team1_id'
  belongs_to :visitor_team, :class_name => 'Team', :foreign_key => 'team2_id'
有很多比赛。每场比赛有两队

一个队有很多比赛

团队模型和比赛模型通过竞赛表连接在一起

我有一个比赛id和一个1队id和一个2队id的竞赛模型

但我不知道该怎么做,也不知道这是否是最好的方法。我不知道如何让某些团队1和其他团队2。。。。两把外键?可能吗


match表还需要保存其他数据,如team1_点和team2_点、赢家和输家等。

表中可以有任意数量的外键。我编写了一个应用程序,其中包括安排团队在游戏中的时间

我在游戏类中处理此问题的方式如下:

class Game < ActiveRecord::Base
  belongs_to :home_team, :class_name => 'Team', :foreign_key => 'team1_id'
  belongs_to :visitor_team, :class_name => 'Team', :foreign_key => 'team2_id'
类游戏'team',:外部密钥=>'team1\u id'
属于:访客团队,:类名称=>'team',:外键=>'team2\u id'
您可以为team1_积分、team2_积分等添加适当的字段。您需要使用以下内容设置团队模型:

class Team < ActiveRecord::Base
  has_many :home_games, :class_name => 'Game', :foreign_key => 'team1_id'
  has_many :visitor_games, :class_name => 'Game', :foreign_key => 'team2_id'

  def games
    home_games + visitor_games
  end

  #important other logic missing
end
class团队'Game',:foreign\u key=>'team1\u id'
有很多:访客游戏,:类名=>'Game',:外键=>'team2\u id'
def游戏
家庭游戏+访客游戏
结束
#缺少其他重要逻辑
结束

请注意,我的一些命名约定是必须使用遗留数据库的结果。

我遇到了类似的问题,扩展了前面的答案,我所做的是:

class Game < ActiveRecord::Base

  def self.played_by(team)
    where('team1_id = ? OR team2_id = ?', team.id, team.id)
  end
end

class Team < ActiveRecord::Base

  def games
    @games ||= Game.played_by(self)
  end
end
类游戏

这样,
Team#games
将返回一个
ActiveRecord::Relation
而不是
数组
,因此您可以继续链接其他作用域。

这是一个很大的帮助。非常感谢。所以我完全理解,这只是一个有很多很多的关联,对吗?没有一个有很多:通过???和:home_团队和:visitor_团队基本上只是虚拟的模型,而不是实际的模型???我只是在编造这个词,但似乎就是这么回事。(同样适用于:home_games和:visitor_games。)再次感谢您!确切地:class_name标签告诉您它实际上是什么型号。没有“家庭团队”模式,只有一个团队。这意味着myGame.home\u团队为您提供对团队对象的引用。如果这有助于您或回答您的问题,请将其标记为答案。