Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 中的Ruby Find last记录值有许多_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 中的Ruby Find last记录值有许多

Ruby on rails 中的Ruby Find last记录值有许多,ruby-on-rails,ruby,Ruby On Rails,Ruby,我试图找到属于经济报告的最后一个经济结果。我想在索引视图中显示每个经济报告的经济结果的最后一条记录(按“发布日期”排序)。在控制器中,我尝试获取所有报告的列表,并使用以下命令查找最后的结果: @econ_reports = EconReport.all if @econ_reports.econ_results.size >= 1 @last_result = @econ_report.econ_results.last.release_date end econ_report.ec

我试图找到属于经济报告的最后一个经济结果。我想在索引视图中显示每个经济报告的经济结果的最后一条记录(按“发布日期”排序)。在控制器中,我尝试获取所有报告的列表,并使用以下命令查找最后的结果:

@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-then签入了当前失败的控制器


提前感谢新手的帮助。

如果您只想知道发布日期,可以尝试:

@last_result = @econ_report.econ_results.order('release_date DESC').limit(1).pluck(:release_date).first
值得注意的是,Ruby
if
语句通常如下所示:

if condition
end

then
几乎总是被忽略,即使它是允许的。

因为
@econ\u reports
EconReport
对象的集合,所以不能对其调用
.econ\u results
这样的实例方法。相反,您只能在集合中的实例上调用它:

@econ_reports.each do |econ_report|
  if econ_report.econ_results.any?
    last_result = econ_report.econ_results.last
  end
end
但是,对于大量的
@econ_报告
:包含
econ_报告的两行。econ_结果
将分别查询数据库,这意味着您将为集合中的每个
econ_报告
单独查询数据库。这就是我们所知道的

幸运的是,正如链接中所讨论的,Rails有一个内置的解决方案来优化此代码,因此您只需查询数据库一次:

<% @econ_reports.includes(:econ_results).each do |econ_report| %>
  <% if econ_report.econ_results.any? %>
    <% last_result = econ_report.econ_results.last %>
    # do something to display last_result
  <% end %>
<% end %>

#做一些事情来显示最后的结果

使用
@econ_reports.econ_results.count>1
@econ_reports.econ_results.any?
感谢您的反馈。上述解决方案适用于带有变量@econ_report的单个报表的显示视图。但是,当我尝试在索引上设置@last_result变量时,@econ_report不起作用(目前只在show、edit、update、destroy上设置),并且变量@econ_reports.econ_results因nil:nilclass的未定义方法“econ_results”而出错,在我调用@econ_reports.econ_results.size>=1时,我得到了一个错误:您想要每个报告的最后一个,还是所有报告的最后一个?我想显示每个报告的最后一个,然后您需要为每个报告执行此操作。例如:
@econ_reports.each do | econ_report |
在您的视图中进行迭代,然后类似于我为每个值建议的内容。它在一定程度上起作用。我将代码放在控制器中,用于索引下的econ_报告,它确实会调出最后一个值,而不考虑具体的报告记录。换句话说,最后一个值是275000,它出现在视图中的每条记录上,而不是仅显示一条记录,该值作为最终值,以使其遍历每条报告记录。我需要将此代码放置在其他位置还是需要进一步细化它?@M.Wood我不确定您的意思。此代码将为每个
econ\u报告
分配
last\u result
到最后一个
econ\u result
——我假定您将对块内的
last\u result
记录执行某些操作。因此,它在视图中确实工作得更好(请参见我的编辑)。如果这不是你想要的,你能用例子更具体地说明你想要什么吗?我发现了我的错误。因为我在报表表中引用了这个值,所以我必须减少代码以排除.do调用,因为它在表的范围内是多余的。通过使用
它起作用了