utilisant la portée sur une association

J'ai donc eu cette idée folle que j'ai voulu appliquer un champ d'application à une association. C'est ce que j'ai compris, et il semble fonctionner parfaitement:

class Event < ActiveRecord::Base
  has_many :races
  has_many :bad_races, :conditions => Race.bad_medals_sql, :class_name => "Race"
end

class Race < ActiveRecord::Base
  def self.bad_medals_sql
    arel_table[:prizes].eq('medals').to_sql
    # This returns a string
    # "`races`.`prizes` = 'medals'"
  end

  def self.bad_medals
    where(bad_medals_sql)
  end
end

Event.includes(:bad_races)
Reloading...
  Event Load (0.4ms)  SELECT `events`.* FROM `events`
  Race Load (0.5ms)  SELECT `races`.* FROM `races` WHERE (`races`.event_id IN (1,2,3,4) AND (`races`.`prizes` = 'medals'))

Le problème, c'est que c'est vraiment obtus. Afin d'avoir le champ d'application défini sur la Race (à utiliser d'ailleurs) et de l'utiliser sur l'Événement de l'association, je dois avoir deux méthodes sur la Race. Pour chaque portée.

Je suis sûr que je pourrais envelopper le motif dans un plugin ou quelque chose comme ça, mais je préfère utiliser natif AR/ARel si c'est possible. Toutes les idées pour le faire?

source d'informationauteur jsharpe