设置
对于这个问题,我将使用以下三个类:
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: 未找到名为“planet_type”的关联;也许你拼错了?
问题
我发现这是因为它相当于以下内容:
joins(:planets, :planet_type)...
和 SolarSystem 没有planet_type
关联。我想使用like_earth
范围 on Planet
,has_earthlike_planet
on SolarSystem
,并希望避免重复代码和条件。有没有办法像我试图做的那样合并这些范围但缺少一块?如果不是,我可以使用哪些其他技术来实现这些目标?