HTML页面出现含数据库记录的多余文本节点问题排查求助
问题排查与解决
嘿,这个问题我太熟悉了!你看到的那个无标签的多余文本节点,根源就在你用<%= %>包裹的each循环上。
问题原因
在Rails的ERB模板中:
<%= %>会执行代码并把代码的返回值输出到页面each方法的返回值是它遍历的整个集合(也就是@workspace.items)
所以当你写 <%= @workspace.items.each do |item| %> 时,循环会正常渲染每一行<tr>,但循环结束后,Rails会把整个items集合的字符串表示(类似#<Item:0x00007fabc123>, #<Item:0x00007fabc456>)直接输出到页面上,这就是那个莫名其妙的多余文本节点。
修复方案
把你的循环代码里的<%= %>改成<% %>,也就是去掉等号:
<% @workspace.items.each do |item| %> <tr> <td><%= item.name %></td> <td><%= item.owner %></td> <td><%= item.quantity %></td> <td><%= item.details %></td> <td><%= link_to 'Edit Item', edit_workspace_item_path(@workspace,item) %></td> <td><%= link_to 'Delete', [item.workspace, item], method: :delete, data: { confirm: 'Are you sure?' } %></td> </tr> <% end %>
这样循环只会执行渲染<tr>的逻辑,不会输出集合的返回值,多余的文本节点就会消失。
额外的小问题提醒
顺便看了下你的主view代码,还有两个小问题可以顺手修复:
<table>里有重复的<tr>标签(<tr> <tr>),会导致HTML结构异常- 所有的
<th>标签都没有闭合,比如<th><strong>Name</strong>应该改成<th><strong>Name</strong></th>
这些小问题虽然不是当前问题的原因,但可能会引发其他页面渲染异常,建议一起修复。
内容的提问来源于stack exchange,提问作者domaxi
相关产品推荐
相关产品推荐

