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

Rails 7 + Hotwire/Turbo:turbo_frame_tag未按预期渲染问题

问题原因及解决方案

原因

HTML表格的DOM结构有严格嵌套规则:<tbody> 内部只能直接放置 <tr> 元素,<turbo-frame> 属于块级元素,不符合表格的结构规范。浏览器会自动对不合法的DOM结构进行修正——将<turbo-frame>移到表格外部,同时把原本的<tr>留在<tbody>中,这就导致你看到turbo-frame标签空着且跑到表格外面。

解决方案

你可以通过两种方式绕过这个限制:

  • 给<tr>添加data-turbo-frame属性
    这种方式不需要用<turbo-frame>标签包裹整行,而是通过属性关联对应的turbo-frame,既符合表格结构规范,又能实现turbo-frame的功能:

    <tbody>
      <% @users.each do |user| %>
        <tr data-turbo-frame="user_row_<%= user.id %>">
          <%= render "user/row", user: user %>
        </tr>
        <!-- 可将turbo-frame放在表格外或同一行的任意td中 -->
        <turbo-frame id="user_row_<%= user.id %>" style="display: none;"></turbo-frame>
      <% end %>
    </tbody>
    
  • 将<turbo-frame>放在<tr>内部
    把turbo-frame标签放在<tr>里,包裹该行的单元格内容,这样不会破坏表格的结构:

    <tbody>
      <% @users.each do |user| %>
        <tr>
          <turbo-frame id="user_row_<%= user.id %>">
            <td><%= user.name %></td>
            <td><%= user.email %></td>
            <!-- 其他单元格内容 -->
          </turbo-frame>
        </tr>
      <% end %>
    </tbody>
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 21:30:52