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

Rails 7+Devise无法删除用户账号:link_to改button_to生效原因

问题原因分析
  • link_to 依赖UJS才能触发DELETE请求
    Rails里用link_to发送DELETE这类非GET/POST的请求时,只会生成带data-method="delete"属性的<a>标签。这个标签本身只能发起GET请求,必须靠Rails内置的UJS(非侵入式JavaScript)脚本拦截点击事件,把请求转换成DELETE方法。如果你的页面没加载UJS脚本(比如Rails 6+没引入turbo-rails、旧版本没引入rails-ujs),或者脚本加载失败、有JS冲突导致UJS失效,点击链接就会发起普通GET请求。而Devise的user_registration_path的GET路由,在用户已登录时默认会重定向到/users,这就是你看到的情况。

  • button_to 无需JS就能实现DELETE请求
    button_to会直接生成一个完整的<form>表单,表单用POST方法提交,同时自动添加_method="delete"的隐藏字段。Rails后端会识别这个隐藏字段,把请求当作DELETE处理,整个过程不需要依赖JS,所以功能正常。

额外排查点

  • 检查页面源码里的link标签是否包含data-method="delete"属性
  • 确认项目是否正确引入了UJS相关脚本(比如turbo-rails或rails-ujs)
  • 再次检查浏览器控制台是否有隐性的JS报错(比如脚本加载失败的提示)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 01:46:18