3

我想覆盖:id参数,解释了如何。但不适用于嵌套资源。我的路线看起来像:

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

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

4

2 回答 2

5

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

当您创建像projectsinside users, rails 这样的嵌套资源时,您可能会遇到类似 的路径users/:id/projects/:id,这是无意义的,因此 rails 会自动为第一个添加前缀:id,因此params您有:user_idand :id(引用:project_id,但毫无疑问我们在 ProjectsController 中,所以不需要进一步澄清)

现在,当您说 时param: :user_id,这与前缀 加在一起user_,这就是您得到的原因:user_user_id-您要求 rails 完成两次工作。

于 2016-10-27T18:38:06.870 回答
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'

于 2015-08-29T08:50:42.613 回答