私のアプリでは、生徒は problem_sets または quizzes のいずれかで問題を解いています。たとえば、学生が問題セットで問題を解くと、その問題/ユーザーに関する 2 つの統計 (problem_set_stat と problem_stat) が更新されます。したがって、私の関係は次のとおりです。
class ProblemSetInstance
has_one :user
has_many :problem_set_stats
end
class ProblemSetStat
belongs_to :problem_set
belongs_to :problem_stat
has_one :problem_type, :through => :problem_stat
end
class ProblemStat
belongs_to :problem_type
# no has_many problem_set_stats, because I never need to access them from here currently
end
いくつかのデータベース クエリを最適化しようとしたときに、奇妙なことに遭遇しました。問題セットを表示するときは、次のクエリを使用します
ps = problem_set_stats.includes(:problem_stat => [:problem_type])
これで、追加のクエリを実行ps.first.problem_stat
しなくても実行できます。ps.first.problem_stat.problem_type
ただし、実行ps.first.problem_type
すると、別のクエリが実行されます。すべての.problem_type
s を.problem_stat.problem_type
s に変更せずにこれを修正する方法はありますか?