Скажем, у меня есть следующие классы
class SolarSystem < ActiveRecord::Base
  has_many :planets
end
class Planet < ActiveRecord::Base
  scope :life_supporting, where('distance_from_sun > ?', 5).order('diameter ASC')
end
 Planet имеет область life_supporting и SolarSystem has_many :planets. Я хотел бы определить мое отношение has_many, так что, когда я задаю solar_system для всех связанных planets, область life_supporting автоматически применяется. По существу, мне бы хотелось solar_system.planets == solar_system.planets.life_supporting.
Требования
-  
Я хочу не изменить
scope :life_supportingвPlanetнаdefault_scope where('distance_from_sun > ?', 5).order('diameter ASC') -  
Я также хотел бы предотвратить дублирование, не добавляя к
SolarSystemhas_many :planets, :conditions => ['distance_from_sun > ?', 5], :order => 'diameter ASC' 
Цель
Я хотел бы иметь что-то вроде
 has_many :planets, :with_scope => :life_supporting
Изменить: работать вокруг
Как сказал @phoet, возможно, не удастся достичь области по умолчанию с помощью ActiveRecord. Однако я нашел две потенциальные проблемы. Оба предотвращают дублирование. Первый, хотя и длительный, сохраняет очевидную читаемость и прозрачность, а второй - метод вспомогательного типа, выход которого явственен.
class SolarSystem < ActiveRecord::Base
  has_many :planets, :conditions => Planet.life_supporting.where_values,
    :order => Planet.life_supporting.order_values
end
class Planet < ActiveRecord::Base
  scope :life_supporting, where('distance_from_sun > ?', 5).order('diameter ASC')
end
Другим решением, которое является намного более чистым, является просто добавить следующий метод к SolarSystem
def life_supporting_planets
  planets.life_supporting
end
и использовать solar_system.life_supporting_planets везде, где вы бы использовали solar_system.planets.
Ни один из ответов не отвечает на вопрос, поэтому я просто помещаю их здесь как работу, если кто-то еще столкнется с этой ситуацией.