0

私はこれをどうやって行うのが最善かを考えようとしています…私は毎日開催されるコンテストがあり、コンテスト参加者が参加し、すべてのコンテストでそれぞれがスコアを獲得します。一定期間に行われた競技会の各競技者の合計スコアを取得し、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までのすべての競技会を取得し、各競技者の合計スコア(最初に最高スコアでソート)を取得するにはどうすればよいですか?基本的に、私は欲しいです:

  • IDと日付を含む単一の競技結果nil(「仮想」であるため)
  • できるようvirtual_competition.scores.first.score9
  • できるようvirtual_competition.scores.first.contestant.name"Bubblegum"

これがまったく理にかなっていることを願っています。そして、あなたが私を正しい方向に向けることができることを願っています。必要に応じて、より「純粋な」SQLを使用することを嫌がりません。重要なのは、ActiveRecordのオブジェクトマッピングを結果で利用できるようになることです。

違いがあれば、データベースにPostgresを使用しています。

4

1 に答える 1

0
start_date = Date.new("2013-01-01")
end_date = Date.new("2013-01-03")
Competition.include(:contestant_scores => :contestant).where(:date => start_date..end_date).group("contestants.id").order("contestant_scores.score")

私はあなたがそのようなものが必要だと思います

于 2013-01-24T11:25:20.973 に答える