我的应用程序中有一个名为Tracker的模型,下面有一个名为Email的嵌套模型。我想创建一个视图页面,在那里我可以看到我的每个跟踪器与所有相关的电子邮件下面。
我创建了一个循环来显示我所有的跟踪器,然后在两者之间添加一个循环来显示电子邮件,但是它向我显示了所有的电子邮件,而不仅仅是与该跟踪器相关的电子邮件。
下面是我认为出错的视图页面的代码:
<div class="card">
<% @trackers.each do |tracker| %>
<b><%= tracker.title %> <%= tracker.emails.count %></b>
<ol><% for emails in @tracker %>
<li>I'd like the email subject to appear here!</li>
<% end %><ol>
<% end %>
</div>
下面是我的视图页面的控制器:
class PagesController < ApplicationController
def inbox
@emails = Email.order('date_sent ASC')
@email = Email.order('date_sent ASC')
@trackers = Tracker.all
@tracker = Tracker.all
end
谢谢你的帮助!
1条答案
按热度按时间kse8i1jr1#
我认为表之间的关系(跟踪器有_许多电子邮件)
这里是代码
编辑2:
备注:
其他提示(可能是你想了解更多)
@trackers = Tracker.all.includes(:emails)
如果你加载Tracker和与Tracker相关电子邮件,它将创建n+1个查询,这对于附加命令includes(:emails)是没有效率的,它将执行1个查询,这会更快。
(What是n+1查询吗?当我们从数据库中加载一个记录集合时,会发生n+1查询,并且该集合中的每个记录都有一个相关记录。第一个查询从数据库加载记录集合,然后对每n条记录执行一个附加查询)
如果我只想显示来自每个跟踪器的最新电子邮件-我有一个date_sent对象。计数我在控制器中执行@email = Email.order('date_sent ASC').limit(1)或<% tracker.emails.order('date_sent ASC').limit(1)这样的操作|电子邮件|%>在循环中?目前它不显示我的任何电子邮件,但不给予我一个错误。