为何未生成Rails命名空间下的Bulk控制器路由?
Rails命名空间路由未生成预期路径的原因及解决方法
问题分析
你当前的路由代码中,命名空间approvals下的resource :bulk未生成预期的approvals_bulk_approve_path和approvals_bulk_reject_path,执行rails routes -c bulk无输出,核心原因有两点:
approve和reject是自定义动作,不属于Rails默认的RESTful动作集合(index/show/new/create/edit/update/destroy),直接在only选项中指定不会被Rails识别。- 未显式声明自定义动作的路由规则(如HTTP请求方法、是否属于member/collection),Rails无法自动生成对应的路由。
修正后的路由代码
将自定义动作通过member块进行声明(因为resource :bulk是单数资源,member动作无需ID参数),并指定对应的HTTP请求方法:
Rails.application.routes.draw do # skipping some lines for clarity devise_for :users authenticate :user do resources :approvals, only: [:update] namespace :approvals do resource :bulk, controller: :bulk do member do post :approve post :reject end end end end end
验证
执行rails routes -c bulk,即可看到预期的路由:
approvals_bulk_approve_path(对应POST/approvals/bulk/approve)approvals_bulk_reject_path(对应POST/approvals/bulk/reject)
内容的提问来源于stack exchange,提问作者adass
相关产品推荐
相关产品推荐

