Ruby查找最后一个记录值有很多

时间:2015-09-18 17:33:03

标签: ruby-on-rails ruby

我试图找到属于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然后检查当前失败的控制器。

提前感谢新手的帮助。

1 个答案:

答案 0 :(得分:0)

由于@econ_reportsEconReport个对象的集合,因此您无法在其上调用.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