我试图找到属于Econ_Report的最后一个Econ_Result。我想在索引视图上为每个Econ_Report显示Econ_Result的最后一条记录(按" release_date"排序)。在控制器中,我尝试获取所有报告的列表,并使用以下内容查找最后的结果:
@econ_reports = EconReport.all
if @econ_reports.econ_results.size >= 1
@last_result = @econ_report.econ_results.last.release_date
end
当我为每个循环放置它时, econ_report.econ_results.size
适用于索引视图。当我尝试调用最后一条记录的值时,我遇到的问题是某些报告还没有结果(临时问题)所以我扔了if然后检查当前失败的控制器。
提前感谢新手的帮助。
答案 0 :(得分:0)
由于@econ_reports
是EconReport
个对象的集合,因此您无法在其上调用.econ_results
之类的实例方法。相反,您只能在集合中的实例上调用它:
@econ_reports.each do |econ_report|
if econ_report.econ_results.any?
last_result = econ_report.econ_results.last
end
end
但是,对于@econ_reports
的大集合来说,这可能非常低效:具有econ_report.econ_results
的两行将分别查询数据库,这意味着您将为每个{{1}独立查询数据库在集合中。这称为N+1 query problem。
幸运的是,正如链接中所讨论的,Rails有一个内置的解决方案来优化这段代码,所以你只需要查询一次数据库:
econ_report