我正在开发具有以下关联的应用程序:
class Chart < ActiveRecord::Base
belongs_to :chart_group
has_many :charts, :through => :chart_groups
end
class ChartGroup < ActiveRecord::Base
has_many :charts
belongs_to :report
end
class Chart < ActiveRecord::Base
belongs_to :chart_group
end
应用程序的一部分要求我们显示前 20 个报告,并且对于每个报告,我们显示第一个图表(作为一种快照)。他们这样做的方式是,在控制器中只选择报告;
@reports = Report.limit(20)
然后在意见中只是做;
@reports.each do |report|
<%= report.charts.first.title %>
end
这看起来很好并且运行速度很快,但与“N + 1 查询问题”相冲突——我将在每个报告中获得一个数据库往返,因此有 21 次点击。所以我有几个问题
1) 如何更改我的原始查询以获取第一个图表?我尝试使用“.joins”,但问题是任何一份报告都可能有大量图表,并且可能有数百个报告。我不知道如何将“仅第一个图表”部分包含在语句中。
2)实际上是按照我的方式做的,我注意到日志都在说“缓存加载”-rails 在这里为我做了一些魔术吗?我什么都不担心吗?