Rails Turbo Frame渲染的表单无法二次提交 如何不新增路由解决
Turbo Frame内同路径GET筛选表单二次提交被拦截问题
问题背景
位于turbo_frame内的表单首次提交后,第二次提交会被拦截。当前页面路径与表单提交的action路径完全一致,已知Turbo要求表单提交后必须重定向到新地址或返回错误码。
核心疑问
- 我在所有index视图上都部署了向index action发送GET请求的表单,用于根据URL查询参数筛选记录,之前运行完全正常,请问在最新版Rails中该场景是否不再支持?
- 有没有可以不用为表单action新增路由的替代方案?
- 这类筛选、搜索请求属于幂等请求,所以采用GET方法,表单是收集并发送筛选参数非常便捷的方式,请问搭配Hotwire的Rails在该场景下要求重定向是有意设计的正确逻辑吗?
临时解决方案
目前已通过绕开Turbo、改用XHR方式提交表单实现需求,操作步骤如下:
- 给表单添加
local: false和data-turbo: false属性 - 新增index.js.erb文件,通过
document.getElementByID(<Turbo Frame的对应ID>)获取目标Turbo Frame元素,将其outerHTML设置为渲染后的局部视图代码
该方案存在后续失效风险:若Rails官方废弃ujs特性,该实现可能无法正常运行,后续可考虑用mrujs替代。
内容的提问来源于stack exchange,提问作者rigyt
相关产品推荐
相关产品推荐

