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

Rails中使用Turbo Frame提交任务时出现‘Content Missing’错误求助

解决方案

1. 调整控制器的create动作逻辑

默认scaffold的create动作成功后会重定向到任务列表/详情页,但Turbo Frame要求响应中必须包含id="modal"的turbo框架,否则就会触发「Content Missing」错误。你需要修改响应逻辑,让成功创建任务后返回Turbo Stream指令,同时处理验证失败的场景:

# app/controllers/tasks_controller.rb
def create
  @task = Task.new(task_params)

  respond_to do |format|
    if @task.save
      # 成功时:清空模态框并更新任务列表(如果列表在id为"tasks"的frame中)
      format.turbo_stream do
        render turbo_stream: [
          turbo_stream.update("modal", ""),
          turbo_stream.append("tasks", partial: "tasks/task", locals: { task: @task })
        ]
      end
      format.html { redirect_to tasks_url, notice: "Task was successfully created." }
    else
      # 验证失败时:重新渲染带错误提示的表单到模态框
      format.turbo_stream { render :new }
      format.html { render :new, status: :unprocessable_entity }
    end
  end
end

2. 确认新建页面的Turbo Frame结构

确保新建任务的表单完全包裹在turbo_frame_tag "modal"内,表单无需额外设置data-turbo-frame,因为它已经处于目标框架中:

# app/views/tasks/new.html.erb
<%= turbo_frame_tag "modal" do %>
  <div class="modal-container">
    <h1>Add New Task</h1>
    <%= render "form", task: @task %>
    <%= link_to "Cancel", "#", data: { turbo_frame: "_top" } %>
  </div>
<% end %>

3. 检查响应内容

提交表单后,查看终端输出的响应类型:如果返回的是turbo_stream格式,确认包含update "modal"的指令;如果误返回了HTML重定向,Turbo会尝试在modal框架中加载重定向后的页面,而该页面没有id="modal"的框架,就会触发错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 07:23:12