You need to enable JavaScript to run this app. Rails视图输出ActiveRecord_Relation 如何正确渲染Question列表
优惠活动
大模型
产品
解决方案
定价
更多

Rails视图输出ActiveRecord_Relation 如何正确渲染Question列表

问题根因

你在ERB视图的第一行使用了带等号的输出语法<%= %>为@questions变量赋值。ERB语法中,带等号的标记会将表达式的返回值直接渲染到页面,因此整个Question模型查询得到的ActiveRecord_Relation集合对象会被原样输出,形成冗余的页面内容。

ERB代码标记区分:

  • <% %>:仅执行内部的Ruby代码,不会将代码执行的返回值输出到页面,适合承载变量赋值、循环、条件判断这类不需要展示结果的逻辑。
  • <%= %>:执行内部Ruby代码的同时,会将代码的返回值转成字符串输出到页面,适合承载需要渲染到页面的内容,比如文本、链接、标签等。
修正方案
  • 变量赋值的逻辑不需要输出到页面,需要把这一行ERB标记开头的等号去掉,改为无输出的普通代码块标记<% %>。
  • 从代码规范角度优化的话,模型查询的逻辑更推荐放在对应控制器的action中完成,避免在视图层书写数据库查询代码,保持视图层的纯粹渲染职责。

修正后的完整代码示例:

<% # 移除赋值语句前的等号,避免对象内容输出 %>
<% @questions = Question.all.order(:id).reverse_order %>

<% @questions.each do |question|  %>
  <% if @course.id == 1 %>
      <h5><%= link_to question.title, question ,  class: 'reply text-light text-decoration-none' %></h5>
  <% end %>
<% end %>
修正效果

调整后页面将仅渲染遍历生成的Question标题跳转链接,不会再在页面顶部输出冗余的ActiveRecord_Relation对象内容。


内容的提问来源于stack exchange,提问作者Yasuda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.01 01:45:02