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

使用scaffold搭建的Rails博客应用删除文章按钮异常怎么解决?

问题原因

Rails 7 及以上版本默认使用Turbo替换了旧的Rails UJS库,你之前写的method: :delete、data: {confirm}都是UJS专属语法,在Turbo环境下无法生效,所以删除链接会被识别为普通GET请求,直接跳转文章详情页。

解决方案

方案一(官方推荐):改用button_to生成删除按钮

删除属于修改类操作,语义上更适合用按钮实现,写法如下:

<div class="card bg-light">
    <div class="card-body">
        <h4><%= link_to post.title, post %></h4>

        <%= link_to "Read", post, class: 'btn btn-primary' %>   
        <%= link_to "Edit", edit_post_path(post), class: 'btn btn-secondary' %> 
        <%= button_to "Exclude", post, method: :delete, class: 'btn btn-danger', form: {data: {turbo_confirm: 'Are you sure you want to delete?'}} %>
    </div>
</div>

如果一定要用链接实现,补充Turbo专属属性即可:

<div class="card bg-light">
    <div class="card-body">
        <h4><%= link_to post.title, post %></h4>

        <%= link_to "Read", post, class: 'btn btn-primary' %>   
        <%= link_to "Edit", edit_post_path(post), class: 'btn btn-secondary' %> 
        <%= link_to "Exclude", post, class: 'btn btn-danger', data: {turbo_method: :delete, turbo_confirm: 'Are you sure you want to delete?'} %>
    </div>
</div>
必要检查项
  • 确认app/javascript/application.js中存在import "@hotwired/turbo-rails"导入语句,scaffold默认生成该配置,手动删除的需要补回。
  • 确认config/routes.rb中配置了resources :posts,存在destroy接口路由,scaffold默认生成该配置。

内容的提问来源于stack exchange,提问作者Antony M. Luz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 14:21:02