設定
この質問では、次の3つのクラスを使用します。
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)...
太陽系には関連性がありませんplanet_type
。like_earth
スコープをon Planet
、has_earthlike_planet
onで使用したいのですがSolarSystem
、コードと条件の重複を避けたいと思います。私がやろうとしているが、一部が欠けているように、これらのスコープをマージする方法はありますか?そうでない場合、これらの目標を達成するために他にどのような手法を使用できますか?