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

Rails中Turbo Stream prepend元素未进目标div导致CSS失效的问题

解决Turbo Stream插入元素不在网格布局内的问题

问题根源是你当前的Turbo Stream把新实例插入到了turbo frame的最外层(也就是网格容器<div class="my_fifteen_list">的前面),而非网格容器内部,导致无法应用Grid布局。

修复步骤:

  1. 给网格容器添加唯一ID
    在index.html.erb中,给my_fifteen_list的div加上id属性,让Turbo Stream能精准定位到容器内部:

    <div>
      <h1>Mon top 15</h1>
      <%= turbo_frame_tag "myfifteens" do %>
        <!-- 添加id="my_fifteen_list" -->
        <div class="my_fifteen_list" id="my_fifteen_list">
          <%= render @myfifteens %>
          <% (15 - @myfifteens.count).times do %>
            <%= link_to new_year_myfifteen_path(@year), remote: true, data: { turbo_frame: "modal" } do %>
              <div class='add_fifteen'>
                <%= image_tag "add_miss.svg" %>
              </div>
            <% end %>
          <% end %>
        </div>
      <% end %>
    </div>
    
  2. 修改Turbo Stream的插入目标
    在create.turbo_stream.html.erb中,把prepend的目标从"myfifteens"(turbo frame)改成"my_fifteen_list"(网格容器),这样新实例会被插入到网格容器的顶部,成为Grid布局的子元素:

    <%= turbo_stream.prepend "my_fifteen_list", @myfifteen %>
    
    <%= turbo_stream.update "modal", "" %>
    

原理说明:

  • 原代码中turbo_stream.prepend "myfifteens"会把新元素插入到<turbo-frame id="myfifteens">的所有子元素最前面,也就是网格容器的上方,自然无法继承Grid布局。
  • 修改后,目标指向网格容器内部,新实例会成为网格的直接子元素,自动应用grid-template-columns: repeat(3, 1fr)的布局规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 16:32:31