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

--~--~---------~--~----~------------~-------~--~----~
Vous avez reçu ce message, car vous êtes abonné au groupe "Railsfrance" de 
Google Groups.
Pour transmettre des messages à ce groupe, envoyez un e-mail à l'adresse 
[email protected]
Pour résilier votre abonnement envoyez un e-mail à l'adresse 
[email protected]
-~----------~----~----~----~------~----~------~--~---

Répondre à