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

如何确保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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 10:42:02