我想覆盖:id
参数,这解释了如何。但不适用于嵌套资源。我的路线看起来像:
resources :users, param: :user_id do
resources :projects, param: :project_id
end
这会生成格式的 url: :user_user_id/:project_id
。我宁愿把它作为:user_id/:project_id
. 有人可以帮忙吗?
我想覆盖:id
参数,这解释了如何。但不适用于嵌套资源。我的路线看起来像:
resources :users, param: :user_id do
resources :projects, param: :project_id
end
这会生成格式的 url: :user_user_id/:project_id
。我宁愿把它作为:user_id/:project_id
. 有人可以帮忙吗?
我知道这是一个已经回答的老话题,但正如我所见,没有解释为什么 @Зелёный 的代码有效而不是 @sonalkr132 的代码(我知道这似乎离题,但 @sonalkr132 发布了另一个问题,显示我说他不明白它是如何工作的)
当您创建像projects
inside users
, rails 这样的嵌套资源时,您可能会遇到类似 的路径users/:id/projects/:id
,这是无意义的,因此 rails 会自动为第一个添加前缀:id
,因此params
您有:user_id
and :id
(引用:project_id
,但毫无疑问我们在 ProjectsController 中,所以不需要进一步澄清)
现在,当您说 时param: :user_id
,这与前缀 加在一起user_
,这就是您得到的原因:user_user_id
-您要求 rails 完成两次工作。
这段代码:
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'