Переопределение именованных параметров маршрута с вложенными ресурсами

Я хочу переопределить :id Param, и это объясняет, как. Но на самом деле не работает с вложенными ресурсами. Мои маршруты выглядят так:

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

это генерирует URL формата: :user_user_id/:project_id, Я предпочел бы это как :user_id/:project_id, Может кто-нибудь, пожалуйста, помогите?

2 ответа

Решение

Этот код:

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'

Я знаю, что это старая тема, на которую уже дан ответ, но, как я вижу, нет объяснения, почему код @Зелёный работает, а не код @sonalkr132 (я знаю, что это может показаться не по теме, но @ sonalkr132 опубликовал еще один вопрос, который показал мне то он не понял как работает)

Когда вы создаете вложенные ресурсы, такие как projects внутри users, рельсы вы рискуете иметь путь как users/:id/projects/:id, что нонсенс, поэтому rails автоматически добавляет префикс к первому :idи, таким образом, в params у тебя есть :user_id а также :id (ссылаясь на :project_id, но, без сомнения, мы находимся в ProjectsController, поэтому никаких дополнительных разъяснений не требуется)

Теперь, когда вы говорите param: :user_idэто добавляет вместе с префиксом user_вот почему вы получаете :user_user_id - Вы просите рельсы сделать работу дважды.

Другие вопросы по тегам