2

在我的应用程序中,学生在问题集或测验中做题。例如,当学生在问题集上做一个问题时,该问题/用户的两个统计信息会更新 - 一个问题集统计数据和一个问题统计数据。因此我的关系如下

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更改为 s 的情况下解决此问题.problem_stat.problem_type

4

1 回答 1

2

在这种情况下,它不急切加载 has_one 关系的原因是因为它被定义为模型上的单独关系。每个关系都是独立的,因此即使它“通过”另一个关系,您仍然需要明确包含它。

problem_set_stats.includes({:problem_stat => :problem_type}, :problem_type)
于 2012-11-27T13:19:12.503 回答