Rails7删除用户跳转至show而非destroy动作问题求助
解决Rails 7中
link_to删除请求跳转到show动作的问题 在Rails 7中,默认移除了jQuery UJS,转而使用Hotwire Turbo,这是导致method: :delete失效、请求变为GET(跳转到show动作)的核心原因。以下是几种可行的解决方案:
方案1:使用Turbo的data-turbo-method属性
将视图中的link_to代码替换为Turbo兼容的写法:
<p> <%= link_to "Destroy this user", user, data: { turbo_method: :delete } %> </p>
Turbo会通过这个属性触发DELETE请求,确保路由匹配到destroy动作。
方案2:重新引入Rails UJS
如果你更习惯传统UJS的方式,可以在app/javascript/application.js中导入Rails UJS:
import "@rails/ujs"
导入后重启服务器,原来的method: :delete写法就能正常工作,此时生成的HTML会带有data-method="delete"属性。
额外排查点
- 确认Turbo已启用:检查
app/javascript/application.js中是否存在import "@hotwired/turbo-rails",这是Rails 7默认配置,如果被注释请恢复。 - 检查路由:运行
rails routes确认DELETE /users/:id确实指向users#destroy动作。 - 浏览器控制台排查:打开浏览器开发者工具,查看是否有JS加载报错,同时检查生成的链接HTML属性是否正确(Turbo方式对应
data-turbo-method="delete",UJS方式对应data-method="delete")。
内容的提问来源于stack exchange,提问作者Rahul Gupta
相关产品推荐
相关产品推荐

