2015-08-29 3 views
5

Я хочу иметь согласованность в назначении именования моих маршрутов. Параметр по умолчанию - :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. Я пытался перегружать параметры по умолчанию следующим this

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.

ответ

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 

Однако примечание, что помощники не то же самое, как и в принятом ответе.

Вы можете использовать опцию «как», чтобы этого избежать. Более гибкое решение, как здесь: https://stackoverflow.com/a/41323489/2405850