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
相关产品推荐
相关产品推荐

