我試圖弄清楚如何最好地去解決這個問題......我每天都會舉行比賽,參賽者將參加比賽,並且每場比賽都會得到一個分數。我希望能夠檢索在某一段時間內參加比賽的每位參賽者的總分,並獲得Rails仍然可以使用的「虛擬」比賽模型(即單排)。使用has_many進行計算,:通過ActiveRecord關係?
我的代碼/數據的結構是這樣的:
比賽:
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的數據庫,如果這有什麼區別。
謝謝!雖然這給了我3個單獨的比賽,並且沒有增加比分,對吧......?對不起,如果我在這裏很濃厚 - 隨着我的進步而學習。 –