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

