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

Ruby on Rails中link_to销毁请求失效但button_to功能正常如何解决?

故障原因

你的问题核心是 UJS未正确加载,直接导致link_to的method: :delete逻辑不生效,完全符合你描述的表现:

  • button_to不需要UJS支持:它默认生成原生表单,内置隐藏的_method=delete字段,Rails会自动识别为DELETE请求,所以始终正常。
  • link_to的非GET请求完全依赖UJS拦截点击事件伪造请求,UJS加载失败时就会走默认GET跳转,命中show动作。

导致UJS未加载的直接原因是你混用了Sprockets和Webpacker的资源导入语法:
你用的是Rails 6+的Webpacker打包方案,但application.js里写的//= require jquery、//= require jquery_ujs是旧版Sprockets资产管道的导入指令,Webpacker完全不识别,所以jquery_ujs根本没有被打包加载。而且Rails 5.1之后官方推出的@rails/ujs已经完全替代了jquery_ujs,不需要依赖jQuery,你已经在代码里导入了@rails/ujs,额外引入jquery_ujs属于冗余操作。


修复步骤

  1. 清理application.js中的无效代码,删掉这两行:
//= require jquery
//= require jquery_ujs

如果确实需要jQuery支持,要通过yarn安装依赖后用import语法导入,不要用Sprockets的//= require指令。

  1. 检查布局文件app/views/layouts/application.html.erb,确认Webpacker资源引用正确,必须使用javascript_pack_tag而不是旧版的javascript_include_tag:
<%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>
  1. 清理资产缓存后重启服务:
rails assets:clobber
# 开发环境直接重启Rails服务即可,生产环境需重新执行webpacker编译
  1. 验证UJS加载状态:打开浏览器控制台输入Rails,如果返回UJS对象则加载成功,此时link_to的删除功能即可正常使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 09:27:03