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