Rails嵌套模型循环显示问题:按Tracker关联展示Email
问题修复:展示Tracker关联的对应Email
1. 修正视图代码的循环错误
你当前视图的循环逻辑存在问题:用全局变量@tracker(控制器中定义的所有Tracker集合)遍历,而不是当前迭代的单个tracker对象,导致显示所有Email而非对应Tracker的关联邮件。
修正后的视图代码:
<div class="card"> <% @trackers.each do |tracker| %> <b><%= tracker.title %> <%= tracker.emails.count %></b> <ol> <% tracker.emails.each do |email| %> <li><%= email.subject %></li> <% end %> </ol> <% end %> </div>
核心修改:
- 遍历当前
tracker的关联集合tracker.emails,而非全局的@tracker - 输出
email.subject显示对应邮件的主题
2. 优化控制器冗余代码
控制器存在重复变量定义,同时可以通过预加载优化数据库查询性能(避免N+1查询问题):
class PagesController < ApplicationController def inbox # 预加载关联的emails,减少数据库查询次数 @trackers = Tracker.includes(:emails).all # 冗余变量可删除,视图已不再使用全局@emails/@email/@tracker # @emails = Email.order('date_sent ASC') # @email = Email.order('date_sent ASC') # @tracker = Tracker.all end end
核心优化:
- 移除重复定义的冗余变量
- 使用
includes(:emails)预加载所有Tracker的关联Email,提升页面加载效率
内容的提问来源于stack exchange,提问作者Cat Morley
相关产品推荐
相关产品推荐

