Rails 7中turbo_method: :delete无法删除用户问题求助
Rails 7中删除链接触发GET请求的问题解决
核心原因:Turbolinks 和 Turbo 冲突
你当前环境装了turbolinks 5.2.1,但Rails 7默认用的是Turbo(和Turbolinks是两个独立工具),二者语法不兼容:
turbo_method: :delete是Turbo的专属语法,Turbolinks完全不识别这个属性,所以点击链接只会触发默认的GET请求逻辑。- 旧版Rails的
method: :delete依赖Rails UJS,但Rails 7已经默认移除了UJS,改用Turbo来处理非GET请求的链接与表单。
正确解决步骤
移除Turbolinks,改用官方推荐的Turbo
Rails 7原生集成Turbo,没必要同时保留Turbolinks,直接操作:- 打开
Gemfile,删掉gem 'turbolinks'这一行,执行bundle install。 - 打开
app/javascript/application.js,删掉Turbolinks的导入语句(比如import "turbolinks"),替换成Turbo的导入:import "@hotwired/turbo-rails"
- 打开
使用正确的链接写法
配置好Turbo后,两种写法都能正常触发DELETE请求:- Turbo专属语法:
<%= link_to "delete", user, data: { turbo_method: :delete } %> - 更简洁的兼容写法(Rails 7会自动转成Turbo需要的属性):
<%= link_to "delete", user, method: :delete %>
- Turbo专属语法:
验证Turbo是否生效
打开浏览器控制台,输入Turbo,如果能返回一个对象,说明Turbo已经正常加载。
临时方案(非要保留Turbolinks)
如果因特殊需求必须用Turbolinks,需要重新启用Rails UJS:
- 在
Gemfile里添加gem 'rails-ujs',执行bundle install。 - 在
app/javascript/application.js里导入import "rails-ujs"。 - 链接写法换回旧版格式:
<%= link_to "delete", user, method: :delete %>
但还是建议换成Turbo,这是Rails 7的官方标准方案,后续维护坑更少。
内容的提问来源于stack exchange,提问作者Matthias
相关产品推荐
相关产品推荐

