2015-08-29 38 views
5

我想在我的路线的命名约定中保持一致。任何资源的默认参数为:id。但是,如果在其中嵌套另一个资源,父资源的参数更改为:parent_id。 我的路由是这样的:覆盖嵌套路线中的参数

resources :users do 
    resources :projects do 
    resources :issues 
    end 
end 

对于用户模型会产生像:id的URL,URL项目将是:user_id/:id和问题的URL将被:user_id/:project_id/:id。我试图重载默认PARAM以下this

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

它生成的网址,如::user_user_id/:project_project_id/:issue_id。由于我重写它,我会希望关闭父资源的默认附加关闭。我希望我的路线看起来像:user_id/:project_id/:issue_id,我希望它能够与所有模型保持一致。即项目应映射到:user_id/:project_id

回答

8

这些路线这是我做到了......不知道是否有一个更好的办法,但它应该做的伎俩......

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 
0

尝试在routes.rb中

resources :users, :key => :user_id do 
    resources :projects, :key => :project_id do 
     resources :issues, :key => :issue_id 
    end 
    end 
+0

对不起Haider,但它只添加了参数列表的一个键:'参数:{“key”=>:project_id,“user_id”=>“addie”,“id”= >“new_project”}' – sonalkr132

+0

@ sonalkr132你想将'/ customers /:customer_id/projects /:project_id/issues'转换为'/:user_user_id /:project_project_id /:issue_id' –

+0

不!我想要其他方式。即':user_user_id /:project_project_id /:issue_id'到':user_id /:project_id /:issue_id'。覆盖参数会生成前者。 – sonalkr132

3

尝试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