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

Rails 8.0.2 + ActiveAdmin 3.3.0 DELETE请求失效问题求助

解决Rails 8.0.2 + ActiveAdmin 3.3.0中DELETE操作失效问题

针对你的技术栈(Propshaft + ImportMap + Turbo Rails),以下是适配的解决方案:

1. 确保Turbo正确导入并配置

首先确认Turbo在项目中正常加载,且避免与Rails UJS冲突:

  • 在config/importmap.rb中添加:
    pin "turbo-rails", to: "turbo.min.js", preload: true
    
  • 在app/javascript/application.js中导入:
    import "@hotwired/turbo-rails"
    

注意:不要同时导入Rails UJS,Turbo已替代其处理非GET请求的功能,共存会导致冲突。

2. 修复ActiveAdmin的Delete按钮属性

ActiveAdmin 3.3.0默认的Delete链接未添加Turbo所需的data-turbo-method属性,导致请求被转为GET。可选择全局或单个资源修复:

全局修复(覆盖所有Admin资源)

在app/admin/application.rb中添加:

ActiveAdmin::ResourceController.class_eval do
  action_item :destroy, only: :show do
    link_to(
      'Delete',
      resource_path(resource),
      method: :delete,
      data: {
        turbo_method: :delete,
        turbo_confirm: '确定要删除吗?' # 可选,添加删除确认提示
      }
    )
  end
end

单个资源修复

在具体的Admin资源文件(如app/admin/post.rb)中自定义动作按钮:

ActiveAdmin.register Post do
  action_item :destroy, only: :show do
    link_to(
      'Delete',
      post_path(post),
      method: :delete,
      data: { turbo_method: :delete, turbo_confirm: '确定要删除吗?' }
    )
  end

  # 确保destroy动作接收DELETE请求
  member_action :destroy, method: :delete do
    resource.destroy
    redirect_to collection_path, notice: "#{resource_class.model_name.human} 删除成功"
  end
end

3. 验证Propshaft资源加载

确保ActiveAdmin的静态资源被Propshaft正确处理:

  • 在config/initializers/active_admin.rb中确认配置:
    config.javascripts = ['active_admin']
    config.stylesheets = ['active_admin']
    

Propshaft会自动处理这些资源的加载,无需额外配置。

4. 系统测试适配

如果系统测试因DELETE请求未触发失败,可调整测试逻辑:

  • 使用Capybara时,直接发送DELETE请求而非模拟点击:
    delete post_path(post)
    expect(response).to redirect_to posts_path
    
  • 或手动模拟Turbo的请求行为:
    page.driver.submit :delete, post_path(post), {}
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 10:12:41