J'essaie de trouver la meilleure façon de procéder ... J'ai des compétitions, qui ont lieu tous les jours, avec des participants, et ils obtiennent chacun un score dans chaque compétition. Je veux être en mesure de récupérer le score total de chaque Participant dans les Compétitions qui ont eu lieu sur une certaine période de temps, et obtenir un modèle de Compétition "virtuel" (une seule ligne) encore utilisable par Rails.Utilisation de calculs avec has_many,: via les relations ActiveRecord?
Mon code/données est structuré comme suit:
compétition:
has_many :contestant_scores
has_many :contestants, through: :contestant_scores
Colonnes: id, date
Concurrent:
has_many :contestant_scores
Colonnes: id, name
ContestantScore:
belongs_to :competition
belongs_to :contestant
Colonnes: competition_id, contestant_id, score
Étant donné les données suivantes:
(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
Comment procéder pour récupérer toutes les compétitions entre le 01/01/2013 et le 01/01/2013 et obtenir le score total de chaque participant (trié par ordre décroissant)? Au fond, je veux:
- un seul résultat de la concurrence avec un identifiant
nil
et la date (car il est « virtuel ») - pour pouvoir faire
virtual_competition.scores.first.score
et obtenir9
- pour pouvoir faire
virtual_competition.scores.first.contestant.name
et obtenir"Bubblegum"
J'espère que cela a un sens du tout, et espère que vous pouvez me diriger dans la bonne direction. Je ne suis pas opposé à l'utilisation de SQL plus "pur" si nécessaire, l'important étant que je puisse utiliser le mappage d'objet d'ActiveRecord avec le résultat. J'utilise Postgres pour la base de données si cela fait une différence.
Merci! Cela me donne 3 Compétitions séparées cependant, et il n'y a pas d'addition des scores, n'est-ce pas ...? Désolé si je suis épais ici - apprendre au fur et à mesure. –