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

Rails7安装UJS后删除按钮触发Get请求而非Destroy请求的解决

Rails7中UJS配置问题导致Delete链接触发GET请求的解决办法

以下是针对问题的具体排查和解决步骤:

  • 确认UJS正确安装并引入
    Rails7默认使用Importmap管理JS依赖,需确保rails-ujs已正确配置:

    1. 在config/importmap.rb中添加:
      pin "rails-ujs", to: "rails-ujs.js"
      
    2. 在app/javascript/application.js中导入UJS:
      import "rails-ujs"
      
    3. 确保布局文件(如app/views/layouts/application.html.erb)中加载了JS入口文件,比如包含<%= javascript_importmap_tags %>。
  • 处理Turbo与UJS的冲突
    Rails7默认集成Turbo,它会拦截链接请求并可能覆盖UJS的行为。解决方式二选一:

    1. 给Delete链接添加data: { turbo: false },禁用Turbo对该链接的处理,修改后的代码:
      <%= link_to "Delete", employee_path(employee), method: :delete, class: "btn btn-danger", data: { confirm: "Are You sure to delete this employee", turbo: false } %>
      
    2. 若无需Turbo,可在app/javascript/application.js中移除import "@hotwired/turbo-rails",或在布局中全局禁用Turbo。
  • 验证CSRF令牌存在
    布局文件中必须包含<%= csrf_meta_tags %>,UJS需要该令牌来生成符合要求的DELETE请求头,缺少它会导致请求被降级为GET。

  • 检查浏览器控制台错误
    打开浏览器开发者工具的Console面板,查看是否有UJS加载失败或执行报错的信息,JS运行异常会导致UJS无法将GET请求转换为DELETE请求。

你的控制器destroy动作代码逻辑是正确的,问题主要出在前端UJS的配置或与Turbo的兼容性上。

内容的提问来源于stack exchange,提问作者Afaq Shahid Khan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 07:47:17