You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails 7应用中template对象意外渲染纯文本问题求助

问题根源与解决方案

嘿,我一眼就揪出问题所在了!你这段局部视图里犯了一个很容易踩的ERB语法小错误——遍历模板的时候用了<%=而不是<%。

为什么会出现意外纯文本?

在Rails的ERB模板里:

  • <% %> 是用来执行Ruby代码但不输出结果的(比如循环、条件判断)
  • <%= %> 是用来执行代码并把结果输出到页面上的

你写的<%= @templates.each do |temp| %>,each方法的返回值是它遍历的原数组(也就是@templates本身),所以这个数组的字符串表示(看起来像一堆#<Template:0x0000...>的内容)会被直接渲染到页面上,这就是你看到的意外纯文本!

而你的employee对象代码没问题,大概率是因为那边用的是<% @employees.each do |emp| %>(没有那个等号),所以不会输出数组本身,自然没这个问题。至于模态框里更明显,只是因为模态框的布局更紧凑,这个额外输出的文本没地方“藏”,就显得格外扎眼而已。

修正后的代码

把循环开头的<%=改成<%就行:

<% @templates.each do |temp| %> 
  <div class="template__actions"> 
    <div class="line-item__name"> <%= temp.name %> </div> 
    <%= link_to "<i class='bi bi-trash' style='font-size: 1.5rem; color: red;'></i>".html_safe, [temp], data: {"turbo-method": :delete}, form: { data: {turbo_frame: "_top" } }, class:"btn btn--light staff_icon" %> 
    <%= link_to "<i class='bi bi-pencil-square' style='font-size: 1.5rem; color: black;'></i>".html_safe, [:edit, temp], class:"btn btn--light staff_icon" %> 
  </div> 
<% end %>

小提醒

以后写ERB的时候,记住一个简单的区分方法:如果是要显示内容(比如temp.name)就用<%=,如果只是要执行逻辑(比如循环、if判断)就用<%,别搞混啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 17:02:33