Построение вложенных маршрутов для ресурса, использующего act_as_tree

Знаете ли вы, как динамически генерировать маршруты, такие как:

... (/:parent_id(/:parent_id(/:parent_id(/:parent_id))))/:id

Я задаю этот вопрос, потому что у меня есть модель Folder, которая действует как дерево (у нее есть поле parent_id), а ее метод to_param возвращает свой name, который уникален в рамках parent_id. Таким образом, каждое :parent_id и событие :id являются name. Вот пример пути (с 4 подпапками):

/home/desktop/projects/rails/foobar

... где первый :parent_id (корень) — это «дом», а :id — это «foobar».

Другой пример маршрута может быть (с 1 подпапкой):

/home/music

...где, как видите, params[:parent_id] == 'home' и params[:id] == 'music'.

Есть ли чистый способ написать красивый маршрут Rails 3, который обрабатывает такие возможные вложенные маршруты? Спасибо!!


person Zag zag..    schedule 11.05.2011    source источник


Ответы (1)


Почему бы вам просто не использовать шаблон маршрута и разбить его в контроллере? ?

# routes.rb
get "/*folders/:id" => "files#show" 

Раздел *folders будет объединять несколько сегментов URL.

# files_controller.rb
def show
  folders = params[:folders].split('/') # gives an array of folder names
  # do whatever else necessary
end
person edgerunner    schedule 11.05.2011
comment
Как раз то, что мне нужно! Спасибо, @edgerunner! - person Zag zag..; 12.05.2011