次のことを考慮してください
class Engineer < ActiveRecord::Base
has_many :ideas
scope :masters, -> { where(educational_level: ["master", "candidate"]) }
end
class Idea < ActiveRecord::Base
belongs_to :engineer
scope :popular, -> { where("rating > ?", 4) }
end
ここで、マスター エンジニアによって考案され、エンジニアのage. age簡単にするために、これはテーブル内の単なる整数列であると仮定しengineersます。
これを行う 1 つの方法は、最初にエンジニアを取得することです。
popular_ideas_by_educated_engineers = []
Engineer.masters.order("age").each do |engineer|
popular_ideas_by_educated_engineers += engineer.ideas.popular
end
このコードには n+1 の問題があります。これは、アイデアが積極的にロードされておらず、全体的にぎこちなく感じられるためです。
次のように記述して、目的の結果が得られるようにコードを記述したいと思います。
Idea.popular.by_masters.order_by_engineer_age
これは可能ですか?
Idea結合していくつかの制限を課すクラスにSQLをハードコードできることはわかっていますengineersが、私が探しているのは、Engineerクラスですでに定義されているスコープを利用することです。