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

Ruby on Rails无法触发destroy动作:点击Destroy执行show问题求助

问题分析与解决方法

核心问题

点击Destroy链接时触发了GET /articles/5(对应ArticlesController#show动作),而非预期的DELETE请求,说明Turbo未正确拦截链接并转换请求方法。

排查与解决步骤

1. 确认Turbo正确加载

Rails 7默认集成Turbo,但如果前端资源未正确引入,data-turbo-method属性不会生效:

  • 检查app/javascript/application.js是否包含Turbo导入:
    import "@hotwired/turbo-rails"
    
  • 重启Rails服务器,确保前端资源重新编译。

2. 验证链接HTML渲染结果

查看页面源码,确认Destroy链接的属性是否正确生成:

<a data-turbo-confirm="Are you sure?" data-turbo-method="delete" href="/articles/5">Destroy</a>

若属性缺失,检查link_to代码的拼写(比如turbo_method是否写错,Rails会自动将哈希键转为连字符格式)。

3. 清除浏览器缓存或使用无痕模式

旧的前端资源缓存可能导致Turbo未加载,清除缓存后重试,或直接用无痕模式测试。同时检查浏览器控制台是否有Turbo相关的加载报错(如404找不到JS文件)。

4. 备选方案:改用button_to

如果Turbo仍不生效,可使用button_to生成表单提交(无需依赖Turbo,是Rails传统删除方式):

<li><%= button_to "Destroy", article_path(@article), method: :delete, data: { confirm: "Are you sure?" } %></li>

button_to会自动生成隐藏表单,提交DELETE请求,兼容性更稳定。

5. 确认路由配置有效性

运行rails routes命令,确认输出中存在destroy路由:

DELETE /articles/:id(.:format) articles#destroy

你的routes.rb中resources :articles已正确生成该路由,此步骤主要用于排除路由配置错误。

额外检查点

  • 清理控制器中无关注释:比如destroy方法里的葡萄牙语注释# Adicione esta linha,避免潜在干扰(不影响功能,但建议保持代码整洁)。
  • 排查是否有自定义JS代码阻止了链接的默认行为,比如事件监听器覆盖了Turbo的处理逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 11:55:26