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

Rails博客文章删除功能失效求助:点击Destroy无响应

Rails博客Destroy按钮无响应问题排查与解决

针对你遇到的点击Destroy按钮后文章无法删除、控制器destroy方法未被调用的问题,可按以下步骤排查:

1. 确认Turbo依赖是否正确加载

Rails 7默认使用Hotwire Turbo处理表单和链接的非GET请求,若Turbo未正确加载,data-turbo-method: :delete不会生效:

  • 检查app/javascript/application.js中是否包含:
    import "@hotwired/turbo-rails"
    
  • 确认布局文件(如app/views/layouts/application.html.erb)中存在JavaScript引用:
    <%= javascript_importmap_tags %> <!-- 若使用Importmap -->
    <!-- 或 -->
    <%= javascript_pack_tag 'application', 'data-turbo-track': 'reload' %> <!-- 若使用Webpacker -->
    

2. 验证CSRF令牌是否存在

Turbo发送DELETE请求时需要CSRF令牌验证,缺少令牌会导致请求被服务器拒绝:

  • 检查布局文件的<head>标签内是否包含:
    <%= csrf_meta_tags %>
    
  • 打开浏览器开发者工具,查看页面源码中是否有类似<meta name="csrf-token" content="xxx">的标签。

3. 检查前端生成的HTML属性

点击Destroy按钮前,先查看页面源码中该链接的HTML结构,确认Turbo相关属性是否正确生成:

  • 正确的HTML应包含:
    <a href="/articles/1" data-turbo-method="delete" data-turbo-confirm="Are you sure?">Destroy</a>
    
  • 若属性缺失或拼写错误,需修正link_to中的data哈希写法。

4. 查看服务器日志定位请求状态

点击Destroy按钮后,查看Rails服务器控制台日志:

  • 若日志中没有出现DELETE请求,说明前端未发送请求,问题出在Turbo加载或属性配置;
  • 若日志中出现DELETE请求但返回422 Unprocessable Entity或403 Forbidden,通常是CSRF令牌验证失败;
  • 若请求返回200 OK但未执行删除,可在destroy方法中添加puts "Destroy method called"测试是否执行,或检查Article.find(params[:id])是否能找到对应记录。

5. 确认Turbo确认弹窗是否被拦截

浏览器的弹窗阻止功能可能会拦截Turbo的确认提示,导致请求无法触发:

  • 点击Destroy按钮时,检查是否弹出"Are you sure?"的确认框;
  • 若未弹出,检查浏览器是否允许该网站的弹窗,或暂时关闭弹窗阻止功能测试。

内容的提问来源于stack exchange,提问作者Francisco Núncio

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 10:15:47