Rails 3 маршрутизация: настройка ресурсоемкого маршрута
У меня есть несколько документов (и DocumentsController), которые отсортированы с использованием ограниченного, фиксированного набора категорий. Я бы хотел, чтобы мои маршруты учитывали эти категории, чтобы мои URL выглядели так:
/documents/:category/:id
/documents/:category/new
/documents/:category/:id/edit
... и так далее, что должно позволить мне получить доступ к params[:category] для фильтрации результатов. Есть ли простой способ добиться этого, который бы по-прежнему генерировал помощников пути? Или я ошибаюсь, чтобы сделать это таким образом?
2 ответа
Вы можете указать путь к ресурсу (как вы упомянули):
# config/routes.rb
resources :documents, :path => 'documents/:category'
Это даст вам следующие маршруты:
/documents/:category
/documents/:category/new
/documents/:category/:id/edit
/documents/:category/:id
В этом случае я не уверен, для какой цели будет использоваться захват категории, поскольку вы можете ссылаться на документ по его первичному ключу. Этот ключ, скорее всего, не повторяется по категориям.
Нетрудно настроить пути в Rails 3.
match '/documents/:id', to: 'documents#show', as: :document
даст вам помощник пути document_path(:id)
, Это будет работать даже для идентификатора, который является строкой, а не числом, поэтому расширение этого шаблона до /documents/:category/:id/edit
должно быть никаких проблем.