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

Rails 7中turbo_method: :delete无法删除用户问题求助

Rails 7中删除链接触发GET请求的问题解决

你当前环境装了turbolinks 5.2.1,但Rails 7默认用的是Turbo(和Turbolinks是两个独立工具),二者语法不兼容:

  • turbo_method: :delete是Turbo的专属语法,Turbolinks完全不识别这个属性,所以点击链接只会触发默认的GET请求逻辑。
  • 旧版Rails的method: :delete依赖Rails UJS,但Rails 7已经默认移除了UJS,改用Turbo来处理非GET请求的链接与表单。

正确解决步骤

  1. 移除Turbolinks,改用官方推荐的Turbo
    Rails 7原生集成Turbo,没必要同时保留Turbolinks,直接操作:

    • 打开Gemfile,删掉gem 'turbolinks'这一行,执行bundle install。
    • 打开app/javascript/application.js,删掉Turbolinks的导入语句(比如import "turbolinks"),替换成Turbo的导入:
      import "@hotwired/turbo-rails"
      
  2. 使用正确的链接写法
    配置好Turbo后,两种写法都能正常触发DELETE请求:

    • Turbo专属语法:
      <%= link_to "delete", user, data: { turbo_method: :delete } %>
      
    • 更简洁的兼容写法(Rails 7会自动转成Turbo需要的属性):
      <%= link_to "delete", user, method: :delete %>
      
  3. 验证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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 01:11:14