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

时间:2015-08-29 08:29:05

标签: ruby-on-rails routes actiondispatch

我想覆盖:id param,this解释如何。但实际上并不适用于嵌套资源。 我的路线看起来像:

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

这会生成格式为的网址::user_user_id/:project_id。我宁愿把它作为:user_id/:project_id。有人可以帮忙吗?

2 个答案:

答案 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完成两次工作。