Bonjour,
suite à mon précédent message, on m’a conseillé d’utiliser la
fonctionnalité
named_scope.
Excellente idée! (merci guillaume)
Je développe actuellement une application pour la gestion de stats de
rencontres sportives. (je débute hein )
J’ai une table events :
t.date :date
t.integer :home_id # clé étrangère de l’équipe qui reçoit
t.integer :away_id # clé étrangère de 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
Voila ce qu’on peut trouver dans le modèle ‘Team’:
has_many :matches_at_home, :class_name => ‘Event’, :foreign_key =>
‘home_id’
has_many :matches_away, :class_name => ‘Event’, :foreign_key =>
‘away_id’
has_many :matches, :class_name => ‘Event’, :finder_sql =>
'SELECT DISTINCT * '+
'FROM teams , events '+
'WHERE (events.home_id=#{id} AND teams.id=events.home_id) OR '+
‘(events.away_id=#{id} AND teams.id=events.away_id)’
Dans le modèle ‘Events’:
belongs_to :home, :class_name => “Team”
belongs_to :away, :class_name => “Team”
named_scope :not_yet_played, :conditions => “date >
'#{Time.now.strftime(”%Y-%m-%d")}’"
named_scope :finished, :conditions => “date <
'#{Time.now.strftime(”%Y-%m-%d")}’"
named_scope :won, :conditions => “home_score_final > away_score_final”
named_scope :lost, :conditions => “home_score_final < away_score_final”
named_scope :draw, :conditions => “home_score_final = away_score_final”
named_scope :not_won, :conditions => “home_score_final <=
away_score_final”
Et là , magie de ruby!
Je peux utiliser le code suivant :
Team.first.matches_at_home.won
Team.first.matches_away.not_yet_played
Ca commence à ressembler à du code qui me plait!
Par contre ce qui me pousse à écrire c’est le fait que le code suivant
me
renvoie une erreur : Team.first.matches.peu_importe_le_scope
===> each delegated to proxy_found.each, but proxy_found is nil: nil
Pourtant Team.first.matches me renvoie bien tous les matches de cette
équipe
(joués et à venir)
Je sèche un peu là (en même temps avec ce qu’il pleut… hum hum)
Si quelqu’un peut m’aider à y voir plus clair dans ce brouillard…
d’avance
merci!!
Arnaud Icard