Настраивать
Для этого вопроса я буду использовать следующие три класса:
class SolarSystem < ActiveRecord::Base
has_many :planets
scope :has_earthlike_planet, joins(:planets).merge(Planet.like_earth)
end
class Planet < ActiveRecord::Base
belongs_to :solar_system
belongs_to :planet_type
scope :like_earth, joins(:planet_type).where(:planet_types => {:life => true, :gravity => 9.8})
end
class PlanetType < ActiveRecord::Base
has_many :planets
attr_accessible :gravity, :life
end
Проблема
Прицел has_earthlike_planet
не работает. Это дает мне следующую ошибку:
ActiveRecord::ConfigurationError: Ассоциация с именем «тип_планеты» не найдена; может вы неправильно написали?
Вопрос
Я узнал, что это потому, что это эквивалентно следующему:
joins(:planets, :planet_type)...
и SolarSystem не имеет ассоциации planet_type
. Я бы хотел использовать область like_earth
для Planet
, has_earthlike_planet
для SolarSystem
и хотел бы избежать дублирования кода и условий. Есть ли способ объединить эти области, как я пытаюсь сделать, но что-то упустил? Если нет, то какие другие методы я могу использовать для достижения этих целей?