2015-08-29 80 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