Rails 7 + Turbo:303重定向未被正常跳转
问题分析与解决方案
你遇到的问题是Turbo处理表单提交后的重定向时,未触发整个页面跳转——尽管产品已成功删除,且网络请求显示GET请求已成功返回200。
以下是几个排查方向和解决方案:
1. 强制使用普通表单提交(绕过Turbo)
Turbo默认会拦截表单请求并通过AJAX处理,虽然303状态码理论上应触发页面导航,但某些场景下可能因Turbo的上下文处理逻辑导致页面不跳转。可以给button_to添加data: { turbo: false },让浏览器以传统方式处理表单提交和重定向:
button_to('Delete', @product, method: :delete, data: { turbo: false })
2. 检查页面结构完整性
确保products_path返回的是完整HTML页面(包含<html>、<head>、<body>标签),而非页面片段。Turbo需要完整的页面结构来替换当前页面,如果返回的是片段,可能不会触发视觉上的页面跳转。
3. 排查JavaScript报错
打开浏览器控制台(F12),查看是否有Turbo相关的JavaScript报错。即使其他Turbo功能正常,个别场景下的错误(比如CSRF令牌失效、Turbo加载异常)也可能导致导航失败。
4. 确认按钮的DOM上下文
如果删除按钮被嵌套在turbo_frame标签内(即使你没特意添加,布局中可能存在),Turbo会将重定向的内容加载到该frame内,而非整个页面跳转。检查页面结构,确认按钮不在任何turbo_frame标签中。
内容的提问来源于stack exchange,提问作者0lli.rocks
相关产品推荐
相关产品推荐

