我想覆盖:id
param,this解释如何。但实际上并不适用于嵌套资源。
我的路线看起来像:
resources :users, param: :user_id do
resources :projects, param: :project_id
end
这会生成格式为的网址::user_user_id/:project_id
。我宁愿把它作为:user_id/:project_id
。有人可以帮忙吗?
答案 0 :(得分:0)
此代码:
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'
答案 1 :(得分:0)
我知道这是一个已经回答过的老话题,但是我看到没有解释为什么@Зелёный的代码可以工作而不是@ sonalkr132的代码(我知道这看似偏离主题,但是@ sonalkr132发布了另一个问题告诉我他不明白它是如何运作的)
当您在projects
内创建users
之类的嵌套资源时,您可能会遇到类似users/:id/projects/:id
的路径,这是无意义的,因此rails会自动为第一个{{{{{{ 1}},因此在:id
params
:user_id
和:id
(引用:project_id
,但毫无疑问我们在ProjectsController中,因此无需进一步说明)
现在,当您说param: :user_id
时,这会与前缀user_
一起添加,这就是您获得:user_user_id
的原因 - 您要求rails完成两次工作。