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

如何为Rails resources默认动作集添加自定义confirm_destroy路由

你可以通过扩展Rails路由的默认资源动作集实现需求,不需要修改现有50多个资源的声明,具体方案如下:

  1. 在config/routes.rb文件的路由定义块最顶部,添加扩展默认动作和路由规则的代码:
Rails.application.routes.draw do
  # 将confirm_destroy加入默认资源动作集合,原生兼容only/except参数筛选
  ActionDispatch::Routing::Mapper::Resources::DEFAULT_RESOURCE_ACTIONS << :confirm_destroy

  # 全局定义confirm_destroy动作的路由规则:GET请求、member级别
  resources do
    get :confirm_destroy, on: :member
  end

  # 下方保留你原有的所有资源路由声明即可,无需任何修改
  resources :users
  resources :posts
  # ... 其余50+资源声明
end
  1. 配置完成后即可直接按你要求的方式使用only/except参数,和原生CRUD动作使用逻辑完全一致:
# 仅保留指定动作,包含自定义的confirm_destroy
resources :users, only: [:show, :confirm_destroy, :destroy]

# 排除confirm_destroy动作
resources :users, except: [:confirm_destroy]

补充说明

  • 生成的路由规则和你之前手动配置的完全一致:路径为/资源名/:id/confirm_destroy,对应命名路由助手为confirm_destroy_资源名单数,例如用户资源的路由助手是confirm_destroy_user_path(@user)
  • 该方案兼容Rails 5.x、6.x、7.x全系列版本,命名空间下的资源也会自动生效
  • 控制器层无需额外调整,直接在对应资源控制器中定义confirm_destroy动作即可正常使用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 09:12:02