覆盖嵌套路径中的参数
我希望在路由的命名约定方面保持一致。 默认参数是:id
任何资源的:id
。 但是,如果在其中嵌套另一个资源,父资源的参数将更改为:parent_id
。 我的路由看起来像:
resources :users do resources :projects do resources :issues end end
对于用户模型,它将生成url,如:id
,对于项目url将为:user_id/:id
,对于问题,url将为:user_id/:project_id/:id
。 我试图在此之后重载默认参数
resources :users, param: :user_id do resources :projects, param: :project_id do resources :issues, param: :issue_id end end
它生成的URL类似于:: :user_user_id/:project_project_id/:issue_id
。 由于我重写它,我希望父资源的默认附加是关闭的。 我希望我的路由看起来像:user_id/:project_id/:issue_id
,我希望它对所有模型都是一致的。 即项目应映射到:user_id/:project_id
。
这就是我做的方式……不确定是否有更好的方法,但它应该做的伎俩……
resources :users, param: :user_id resources :users, only: [] do resources :projects, param: :project_id end resources :users, only: [] do resources :projects, only: [] do resources :issues, param: :issue_id end end
尝试member
:
resources :users, param: :user_id do member do resources :projects, param: :project_id do member do resources :issues, param: :issue_id end end end end
此代码将生成以下路径:
issues GET /users/:user_id/projects/:project_id/issues(.:format) issues#index POST /users/:user_id/projects/:project_id/issues(.:format) issues#create new_issue GET /users/:user_id/projects/:project_id/issues/new(.:format) issues#new edit_issue GET /users/:user_id/projects/:project_id/issues/:issue_id/edit(.:format) issues#edit issue GET /users/:user_id/projects/:project_id/issues/:issue_id(.:format) issues#show PATCH /users/:user_id/projects/:project_id/issues/:issue_id(.:format) issues#update PUT /users/:user_id/projects/:project_id/issues/:issue_id(.:format) issues#update DELETE /users/:user_id/projects/:project_id/issues/:issue_id(.:format) issues#destroy projects GET /users/:user_id/projects(.:format) projects#index POST /users/:user_id/projects(.:format) projects#create new_project GET /users/:user_id/projects/new(.:format) projects#new edit_project GET /users/:user_id/projects/:project_id/edit(.:format) projects#edit 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 users GET /users(.:format) users#index POST /users(.:format) users#create new_user GET /users/new(.:format) users#new edit_user GET /users/:user_id/edit(.:format) users#edit user GET /users/:user_id(.:format) users#show PATCH /users/:user_id(.:format) users#update PUT /users/:user_id(.:format) users#update DELETE /users/:user_id(.:format) users#destroy
但请注意 ,帮助程序与接受的答案中的帮助程序不同。
您可以使用’as’选项来避免这种情况。 这里有更灵活的解决方案: https : //stackoverflow.com/a/41323489/2405850
在routes.rb中尝试这些路由
resources :users, :key => :user_id do resources :projects, :key => :project_id do resources :issues, :key => :issue_id end end