我正在努力弄清楚如何最好地做到这一点……我有比赛,每天都会举行,参赛者参加,他们在每场比赛中都得到一个分数。我希望能够检索在一段时间内发生的比赛中每个参赛者的总分,并获得Rails 仍然可以使用的“虚拟”比赛模型(即单行)。
我的代码/数据结构如下:
比赛:
has_many :contestant_scores
has_many :contestants, through: :contestant_scores
专栏:id, date
参赛者:
has_many :contestant_scores
专栏:id, name
ContestantScore:
belongs_to :competition
belongs_to :contestant
列:competition_id, contestant_id, score
给定以下数据:
(competitions)
id | date
---------------
0 | 2013-01-01
1 | 2013-01-02
2 | 2013-01-03
(contestants)
id | name
--------------
0 | Jake
1 | Finn
2 | Bubblegum
(contestant_scores)
competition_id | contestant_id | score
--------------------------------------
0 | 0 | 1
0 | 1 | 2
0 | 2 | 3
1 | 0 | 1
1 | 1 | 2
1 | 2 | 3
2 | 0 | 1
2 | 1 | 2
2 | 2 | 3
我将如何检索 2013-01-01 和 2013-01-03 之间的所有比赛,并获得每个参赛者的总分(按最高分排序)?基本上,我想要:
- 带有
nil
id 和日期的单个竞赛结果(因为它是“虚拟的”) - 能够做到
virtual_competition.scores.first.score
并得到9
- 能够做到
virtual_competition.scores.first.contestant.name
并得到"Bubblegum"
我希望这是有道理的,希望你能指出我正确的方向。如果需要,我不反对使用更“纯”的 SQL,重要的是我将能够利用 ActiveRecord 的对象映射与结果。
如果这有什么不同,我将使用 Postgres 作为数据库。