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

Rails集成hotwired/turbo-rails后重定向异常问题求助

解决Rails Turbo引入后的重定向异常问题

核心问题分析

启用Turbo后,它会默认拦截所有表单提交请求,即便表单设置了local: true,也可能因版本兼容或Turbo默认行为冲突,导致重定向逻辑异常,引发重复请求或页面状态混乱。

可行解决方案

1. 修改控制器重定向状态码

Turbo对表单提交后的重定向,推荐使用303 See Other状态码(而非Rails默认的302 Found),可避免Turbo重复处理请求。在控制器的create方法中调整代码:

# app/controllers/cats/reservations_controller.rb
def create
  @reservation = Cats::Reservation.new(reservation_params)
  if @reservation.save
    # 显式指定303状态码适配Turbo
    redirect_to root_path, status: :see_other
  else
    render :new
  end
end

2. 给目标表单显式禁用Turbo

在表单中添加data-turbo="false"属性,强制Turbo不拦截该表单的提交,完全使用传统表单提交流程:

<%= form_with model: @reservation, local: true, data: { turbo: false } do |form| %>
  <!-- 表单字段内容 -->
<% end %>

该方法针对性强,不会影响其他依赖Turbo的控制器功能。

3. 全局调整Turbo配置(不推荐)

仅在万不得已时使用此方案,会全局禁用Turbo的核心驱动功能,影响其他Turbo相关特性:

// app/javascript/application.js
import "@hotwired/turbo-rails"
// 全局禁用Turbo驱动
Turbo.session.drive = false
import "controllers"
import "trix"
import "@rails/actiontext"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 11:38:16