Более короткие URL для ресурсоемких маршрутов - PullRequest
2 голосов
/ 07 июля 2011

Я думал, что это будет тривиально, но нигде не могу его найти.

На моем сайте много разных моделей, которые все взаимосвязаны.Допустим,

  • Автор
  • Книга
  • Фотография

Книга и фотография имеют автора, а банка фотографийбыть внутри книги.

resources :authors do
  resources :books

etc..

Итак, используя вложенные ресурсные маршруты, мы получаем такие вещи, как:

/authors/john-smith/photos/picture-of-a-house

или

/books/house-renovation/photos/picture-of-a-house

Эти URL совпадают схлебные крошки у меня на сайте.Крошка будет выглядеть так:

Home > Books > House Renovation > Photos > Picture of a House

Проблема в том, что эти URL-адреса и панировочные сухари становятся слишком длинными и слишком похожими на ресурсы.Я имею в виду, что вы можете заметить сайт Rails издалека, если он использует формат / category / category_id / products / id.

Есть ли способ сократить это, возможно даже сделать его красивым?Ему по-прежнему нужны имена категорий и продуктов, но максимум один параметр перед этим.Что-то вроде:

Book_Photos > House Renovation > Picture of a House

1 Ответ

0 голосов
/ 10 апреля 2012

Вы можете сделать это, просто передав опцию :path своим ресурсам и установив ее в качестве пустой строки в файле маршрута.

Я только что поиграл со следующим:

  resources :authors, :path => "" do
    resources :books, :path => ""
  end

Запуск граблей в командной строке, это произвело это:

          author_books    GET    /:author_id(.:format)           books#index
                          POST   /:author_id(.:format)           books#create
          new_author_book GET    /:author_id/new(.:format)       books#new
         edit_author_book GET    /:author_id/:id/edit(.:format)  books#edit
              author_book GET    /:author_id/:id(.:format)       books#show
                          PUT    /:author_id/:id(.:format)       books#update
                          DELETE /:author_id/:id(.:format)       books#destroy
                  authors GET    /                               authors#index
                          POST   /                               authors#create
               new_author GET    /new(.:format)                  authors#new
              edit_author GET    /:id/edit(.:format)             authors#edit
                   author GET    /:id(.:format)                  authors#show
                          PUT    /:id(.:format)                  authors#update
                          DELETE /:id(.:format)                  authors#destroy

Руководство по маршрутизации Rails довольно тщательно объясняет, что можно сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...