ruby-on-rails - 记录运动队的比赛 - 多对多关系?

标签 ruby-on-rails database-design many-to-many

我是 Ruby on Rails 的新手,但我过去创建了一些简单的应用程序。现在我正在做一些更复杂的事情,而且我对数据库设计感到困惑。

我正在创建一名体育联盟经理,我需要一些关于如何建模团队和比赛之间的关系以指明正确方向的建议。每次两队之间进行比赛时,都会记录比赛。我希望能够执行以下操作:

1) 在特定球队的页面上,我想显示该球队参加的比赛列表。

2) 我想记录每支球队的胜利、失败和平局,以显示在联赛积分榜页面上。

在第 1 点,我认为这将是一个多对多的关系,即一个团队有很多比赛,而一场比赛有很多团队(嗯,实际上只有两个)。我有点困惑的一点是如何以及在哪里存储每个团队的统计数据。我在哪里保持胜利/失败/平局?他们是团队表的一部分吗?如果是这样,如果我有一个页面显示每支球队的战绩/失利/平局,我将如何获得该信息?

最佳答案

这还没有真正完成,但也许这会帮助您或其他人在这里顺利进行。

我专注于如何构建团队和比赛之间的关系。我相信,至少部分解决方案在于使用多态关联,其中一部分可能是自连接。我发誓它就在我面前,我没有看到它。

在这里采取婴儿步骤,假设您的 Matches 表有一张这样的表……

  id   |   home_team_id  |  away_team_id  |  home_team_score  |  away_team_score

您可以使用以下关联在模型中进行设置:
class Match
  belongs_to :home_team, :class_name => :team
  belongs_to :away_team, :class_name => :team
end

class Team
  has_many :home_matches, :foreign_key => :home_team_id, :class_name => :matches
  has_many :away_matches, :foreign_key => :away_team_id, :class_name => :matches
end

一个明显的问题是存在两种关系,而实际上应该只有一种关系。这就是为什么我认为多态关联可以提供帮助,但这有点令人费解。

请参阅 polymorphic associations 上的 Rails 指南看看这是否能帮助你了解我看不到的东西。

关于ruby-on-rails - 记录运动队的比赛 - 多对多关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4982180/

相关文章:

JavaScript/Java GWT 与 Rails

java - 处理申请中有效期的最佳方法是什么?

python - 在django中手动创建中间表

c# - 这个逻辑运算符有捷径吗?

ruby-on-rails - Grunticon 和 TravisCI

ruby-on-rails - Postgres : Many-to-many vs. 多列与数组列

python - Django/SQL : keeping track of who who read what in a forum

python - 从输入/文件自动创建 MySQL 表

python - 过滤 ManyToManyField 中间表字段

java - 使用两个列表和数据库放入 HashMap