使用嵌套资源覆盖命名路由参数
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 做两次工作.
我想覆盖 :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 做两次工作.