使用嵌套资源覆盖命名路由参数

Overriding Named Route Parameters with nested resources

我想覆盖 :id 参数,this 解释了如何。但实际上不适用于嵌套资源。 我的路线如下:

resources :users, param: :user_id do
  resources :projects, param: :project_id
end

这会生成 url 格式::user_user_id/:project_id。我宁愿把它写成 :user_id/:project_id。有人可以帮忙吗?

此代码:

resources :users do
  resources :projects, param: :project_id
end

生成如下路线:

    user_projects GET    /users/:user_id/projects(.:format)                          projects#index
                  POST   /users/:user_id/projects(.:format)                          projects#create
 new_user_project GET    /users/:user_id/projects/new(.:format)                      projects#new
edit_user_project GET    /users/:user_id/projects/:project_id/edit(.:format)         projects#edit
     user_project GET    /users/:user_id/projects/:project_id(.:format)              projects#show
                  PATCH  /users/:user_id/projects/:project_id(.:format)              projects#update
                  PUT    /users/:user_id/projects/:project_id(.:format)              projects#update
                  DELETE /users/:user_id/projects/:project_id(.:format)              projects#destroy

已测试。 Rails '4.2.1'

我知道这是一个已经回答过的老话题,但正如我所见,没有解释为什么 @Зелёный 的代码有效而 @sonalkr132 的代码无效(我知道这看起来可能离题,但 @sonalkr132发布了另一个问题,向我表明他不明白它是如何工作的)

当您在 users、rails 中创建像 projects 这样的嵌套资源时,您可能会有像 users/:id/projects/:id 这样的路径,这是无稽之谈,所以 rails 自动为第一个 :id 添加前缀,因此在 params 中你有 :user_id:id(引用 :project_id,但毫无疑问我们在ProjectsController,因此无需进一步说明)

现在,当你说 param: :user_id 时,它与前缀 user_ 相加,这就是你得到 :user_user_id 的原因 - 你要求 rails 做两次工作.