Я пытаюсь настроить маршруты для модели «Страница», вложенной в модель «Пользователь». Только «Страницы» должны быть ресурсами. (has_many пользователя страницы)Добавление: user_id к ресурсу (rails3 routing)
Это оригинальный способ я сделал это:
resources :users, path: '', only: [] do
resources :pages, path: ''
end
выше работал для меня просто отлично. Маршруты, которые я получил были:
user_pages GET /:user_id(.:format) pages#index
POST /:user_id(.:format) pages#create
new_user_pages GET /:user_id/new(.:format) pages#new
edit_user_pages GET /:user_id/:id/edit(.:format) pages#edit
user_pages GET /:user_id/:id(.:format) pages#show
PUT /:user_id/:id(.:format) pages#update
DELETE /:user_id/:id(.:format) pages#destroy
Это имело смысл для меня, потому что /john-doe/page1
будет user_pages_path(@user, @user.pages.first)
.
Однако new_user_pages не имеет смысла, поскольку пользователь может сделать только страницу для себя. Поэтому каждый пользователь должен посетить/new, а не «/: user_id/new». Кроме того, что происходит, если пользователь посещает другой пользовательский «: another_user_id/new»? (было бы целесообразнее делать new_pages_path и '/ new' вместо new_user_pages_path
и /:user_id/new
).
Другой способ, которым я пытался сделать выше маршрутизации:
Я также понял, что выше может быть достигнуто в течение более короткого пути из-за того, что «: пользователи» не нужно быть изобретательным:
resources :pages, path => :user_id
Однако это привело к дорожкам без "пользователь" в них:
pages GET /:user_id(.:format) pages#index
POST /:user_id(.:format) pages#create
new_pages GET /:user_id/new(.:format) pages#new
edit_pages GET /:user_id/:id/edit(.:format) pages#edit
pages GET /:user_id/:id(.:format) pages#show
PUT /:user_id/:id(.:format) pages#update
DELETE /:user_id/:id(.:format) pages#destroy
Что это за «рельсы»? Кроме того, следует ли удалить «новый» из ресурса и определить его отдельно?
Кроме того, имеет ли смысл использовать сферу или имен вместо?
Спасибо, Ник
Да, я реализовал нечто похожее на ваш 'correct_user'. Я просто подумал, что будет выглядеть проще/лучше, если новый путь создания страницы - 'example.com/new', а не' example.com/johndoe/new'. – Nick