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

Ruby on Rails Destroy Action失效问题求助

Rails 7 删除资源失效问题排查与解决建议

问题描述

学习Ruby on Rails时,实现文章删除功能遇到问题:点击删除链接后页面仅刷新,无任何删除操作执行,推测问题与JavaScript相关。已参照官方指南开发,并搜索相关问题仍未解决。

环境版本

  • Rails 7.0.4
  • Ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-linux]
  • Fedora 37 (Server Edition)

相关代码片段

app/controllers/articles_controller.rb

class ArticlesController < ApplicationController
  def show
    @article = Article.find(params[:id])
  end

  def destroy
    @article = Article.find(params[:id])
    @article.destroy

    flash[:success] = "The article has been destroyed."
    redirect_to articles_path, status: :see_other
  end
end

config/routes.rb

Rails.application.routes.draw do
  resources :articles
end

app/views/articles/show.html.erb(尝试过的多种删除链接写法)

<ul>
  <li>
    <%= link_to "Destroy", article_path(@article), data: {
                  turbo_method: :delete,
                  turbo_confirm: "Are you sure?"
                } %>
  </li>
  <li>
    <%= link_to "Delete", article_path(@article), :method => :delete %>
  </li>
  <li>
    <%= link_to "Defenestrate", article_path(@article), method: :delete %>
  </li>
</ul>

已尝试的无效操作

  • 在app/views/layouts/application.html.erb中尝试引入旧版JS标签,触发资源不存在错误:
    <%= javascript_include_tag :defaults, 'data-turbolinks-track' => true %>
    <%= javascript_include_tag "defaults", 'data-turbolinks-track' => true %>
    <%= javascript_include_tag "application", 'data-turbolinks-track' => true %>
    
    报错信息:
    Sprockets::Rails::Helper::AssetNotFound in Articles#show
    Showing app/views/layouts/application.html.erb where line #10 raised:
    The asset "defaults.js" is not present in the asset pipeline.
    
  • 添加jquery-rails gem,并在app/assets/config/manifest.js引入jquery和jquery_ujs,问题未解决。

解决步骤

Rails 7 默认使用Turbo替代了传统的jquery_ujs,需遵循Turbo的规范配置:

  1. 确认Turbo集成状态
    检查Gemfile是否包含:

    gem "turbo-rails"
    

    若缺失,执行bundle add turbo-rails,再运行rails turbo:install完成自动配置。

  2. 确保布局正确引入Turbo
    在app/views/layouts/application.html.erb中保留正确的JavaScript标签(Rails 7默认使用Importmap):

    <%= javascript_importmap_tags %>
    
  3. 使用Turbo规范的删除链接写法
    仅保留基于Turbo的写法即可,旧版method: :delete是jquery_ujs规范,在Turbo环境下不生效:

    <%= link_to "Destroy", article_path(@article), data: {
      turbo_method: :delete,
      turbo_confirm: "Are you sure?"
    } %>
    
  4. 验证请求与加载状态

    • 打开浏览器开发者工具,查看Console是否有Turbo相关报错;
    • 点击删除链接时,在Network标签中确认请求方法为DELETE(而非GET);
    • 可在destroy方法开头添加puts "Destroy method triggered",通过终端输出判断请求是否到达控制器。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 13:05:41