Bonjour,
Je débute dans rails et je trouve face à un dilemme.
Je développe (enfin j’essaye) une application qui gère des stats
d’évènements sportifs (foot, rugby, basket, choisissez…)
J’ai une table ‘matches’ avec les champs suivants :
t.date :date
t.integer :home_id # clé étrangère vers l’équipe qui reçoit
t.integer :away_id # clé étrangère vers l’équipe qui se
déplace
t.integer :home_score_halftime
t.integer :away_score_halftime
t.integer :home_score_final
t.integer :away_score_final
J’ai également un model Matches avec le code suivant :
has_many :home_matches, :class_name => ‘Event’, :foreign_key =>
‘home_id’
has_many :away_matches, :class_name => ‘Event’, :foreign_key =>
‘away_id’
has_many :won_matches_at_home, :class_name => ‘Event’, :foreign_key
=> ‘home_id’,
:conditions => ‘home_score_final > away_score_final’
has_many :won_matches_away, :class_name => ‘Event’, :foreign_key =>
‘away_id’,
:conditions => ‘home_score_final < away_score_final’
has_many :matches, :class_name => ‘Event’, :finder_sql =>
'SELECT DISTINCT * '+
'FROM teams t, events e '+
'WHERE (e.home_id=#{id} AND t.id=e.home_id) OR '+
'(e.away_id=#{id} AND t.id=e.away_id) '+
‘ORDER BY e.date DESC’
has_many :won_matches, :class_name => ‘Event’, :finder_sql =>
'SELECT DISTINCT * '+
'FROM teams t, events e '+
'WHERE (e.home_id=#{id} AND home_score_final > away_score_final AND
t.id=e.home_id) OR '+
'(e.away_id=#{id} AND home_score_final < away_score_final AND
t.id=e.away_id) '+
‘ORDER BY e.date DESC’
has_many :lost_matches, :class_name => ‘Event’, :finder_sql =>
'SELECT DISTINCT * '+
'FROM teams t, events e '+
'WHERE (e.home_id=#{id} AND home_score_final < away_score_final AND
t.id=e.home_id) OR '+
'(e.away_id=#{id} AND home_score_final > away_score_final AND
t.id=e.away_id) '+
‘ORDER BY e.date DESC’
has_many :draws, :class_name => ‘Event’, :finder_sql =>
'SELECT DISTINCT * '+
'FROM teams t, events e '+
'WHERE (e.home_id=#{id} AND home_score_final = away_score_final AND
t.id=e.home_id) OR '+
'(e.away_id=#{id} AND home_score_final = away_score_final AND
t.id=e.away_id) '+
‘ORDER BY e.date DESC’
Je crois que cela fonctionne même s’il faut que je vérifie encore un
peu je crois.
Le problème est que je n’aime pas ce code
Je le trouve moche et trop répétitif.
Est-ce que vous connaitriez une astuce ou un tour de passe-passe pour
que rendre tout ça plus élégant ?
Merci de votre aide.
arnaud