如何为Rails resources默认动作集添加自定义confirm_destroy路由
你可以通过扩展Rails路由的默认资源动作集实现需求,不需要修改现有50多个资源的声明,具体方案如下:
- 在
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
- 配置完成后即可直接按你要求的方式使用
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
相关产品推荐
相关产品推荐

