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

