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

Rails 6.1搭配Hotwire时link_to指定method:get触发Form跳转报错问题

问题根因
  1. Rails的link_to方法只要显式指定了method参数(无论值是get/post/put等),都会自动为生成的<a>标签添加data-method属性。该属性会被Rails默认加载的rails-ujs模块拦截,点击时不会触发原生的链接跳转,而是动态生成一个隐藏表单提交请求。
  2. 你仅给<a>标签添加了data: {turbo: false}配置,只会让Turbo不拦截原生链接跳转,但rails-ujs动态生成的表单并没有携带data-turbo="false"属性,会被Turbo正常拦截处理。
  3. Turbo对表单提交的响应有默认规范:要求后端必须返回30x重定向响应,如果你当前接口直接返回200状态的页面内容,就会触发Error: Form responses must redirect to another location报错。
  4. 移除method: :get后,link_to不会生成data-method属性,rails-ujs不会拦截点击,也不会生成动态表单,就是普通的原生链接跳转,搭配你写的data: {turbo: false}配置,Turbo也不会拦截,自然就能正常运行。而且原生<a>标签默认就是GET请求,你额外加method: :get本身就是冗余操作。
可选解决方案
  • 直接移除冗余的method: :get配置,就是你现在已经验证可行的方案,也是最推荐的做法。
  • 如果你一定要保留method: :get配置,可以给全局表单加默认的Turbo禁用配置,或者升级匹配版本的hotwire-rails,让其自动处理data-method生成的表单的Turbo属性,不过完全没必要做多余的改造。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 10:45:03