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

Rails中如何在turbo_frame内提交表单而不刷新框架?

在Rails Turbo Frame内提交表单且不刷新框架的解决方法

要解决Turbo Frame内表单提交导致框架刷新的问题,核心是让Turbo明确提交结果的更新目标,同时确保服务器返回的响应匹配对应框架ID。

关键处理步骤

  • 给表单指定Turbo目标框架:在form_with中添加data: { turbo_frame: "sample-frame" },明确告知Turbo将提交后的响应内容更新到ID为sample-frame的框架内,避免触发整个框架刷新或页面跳转。
  • 服务器返回匹配的Turbo Frame响应:控制器处理完表单提交后,返回的视图必须包裹在ID为sample-frame的Turbo Frame标签中,这样Turbo才能精准替换框架内的内容。

修正后的视图代码

<%= turbo_frame_tag "sample-frame" do %>
  <%= form_with(model: model, url: sample_p_url, method: :put, data: { turbo_frame: "sample-frame" }) do |f| %>
    <!-- 其他表单字段 -->
    <%= f.submit "Save" %>
  <% end %>
<% end %>

控制器示例(以update动作为例)

def update
  @model = Model.find(params[:id])

  if @model.update(model_params)
    # 渲染包裹在sample-frame中的表单视图,确保响应包含对应框架
    render partial: "models/form", locals: { model: @model }, layout: false
  else
    # 验证失败时返回带框架的表单,保留错误提示
    render :edit, layout: false
  end
end

之前尝试无效的原因

  • data: {turbo: true}:Turbo默认已全局启用,该属性仅用于全局禁用场景下强制开启Turbo,无法指定目标框架。
  • data: {remote: true}:这是Rails UJS的属性,Turbo接管表单提交逻辑后,该属性不再生效。

内容的提问来源于stack exchange,提问作者aldrien.h

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 22:03:23