使用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>
方案二:保留link_to,修改为Turbo兼容语法
如果一定要用链接实现,补充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
相关产品推荐
相关产品推荐

