如何确保Rails中资源及嵌套资源路由为单数形式?
如何让Rails路由中Dashboard控制器的路径始终为单数形式?
你使用DashboardController作为用户个人资料、设置等页面的控制器,希望路由中始终保持单数形式的dashboard,但当前定义的路由生成后,嵌套的create_child动作对应的控制器路径变成了复数的dashboards#create_child,而你期望所有相关路由的控制器路径都为单数。
原路由配置
resource :dashboard, only: [:show], path: 'dashboard' do post :create_child, on: :collection end resolve("Dashboard") { [:dashboard] } root "dashboard#show"
当前路由生成结果
create_child_dashboard POST /dashboard/create_child(.:format) dashboards#create_child dashboard GET /dashboard(.:format) dashboards#show root GET / dashboard#show
解决方案:显式指定控制器为单数
修改路由配置,在resource中添加controller: 'dashboard'参数,覆盖Rails默认的复数化控制器行为:
resource :dashboard, only: [:show], path: 'dashboard', controller: 'dashboard' do post :create_child, on: :collection end resolve("Dashboard") { [:dashboard] } root "dashboard#show"
修改后的路由生成结果
此时再执行rails routes,会得到符合预期的单数控制器路径:
create_child_dashboard POST /dashboard/create_child(.:format) dashboard#create_child dashboard GET /dashboard(.:format) dashboard#show root GET / dashboard#show
原因说明
Rails的resource路由默认会自动将资源名复数化来匹配控制器(比如resource :dashboard默认对应DashboardsController)。通过显式指定controller: 'dashboard',可以强制路由使用单数形式的控制器名称,从而让所有相关路由的控制器路径都保持单数。
内容的提问来源于stack exchange,提问作者user3574603
相关产品推荐
相关产品推荐

