Github как маршруты в Rails - PullRequest
       24

Github как маршруты в Rails

1 голос
/ 23 августа 2011

Использование github-подобных цепных маршрутов в рельсах

У меня есть URL, подобные этому:

'localhost:3000/document_managers/[:module_name]'
'localhost:3000/document_managers/[:module_name]/1/2/3/.'  # can be any level deep

Вот определение маршрута для них:

map.connect '/document_managers/:module',
  :controller => "document_managers",
  :action => :new_tree,
  :module => ["A","B","C"]

map.connect '/docuemnt_managers/:module/*path',
  :controller => "document_managers",
  :action => "new_tree",
  :module => ["A","B","C"]

Вот проблема:

  1. Идея, что значение имени модуля не может быть ничем, кроме как из указанного выше массива, т.е. ("A", "B", "C "), как в любое время, URL должен быть примерно таким:

    localhost:3000/document_managers/A/1 или

    localhost:3000/document_managers/B/221/1 или

    localhost:3000/document_managers/C/121/1

    , но этоэто не так, даже если localhost:3000/document_managers/D/121/1 обрабатывается как действительный URL-адрес, а для модуля задано значение D, даже если "D" не указан в массиве выше

  2. Мне нужен URL-адрес localhost:3000/document_managers/A чтобы также перенаправить на то же действие, т.е. new_tree, если дополнительный параметр не указан, поскольку в URL-адресе содержатся дополнительные параметры
    localhost:3000/document_managers/C/121/1, тогда URL-адрес перенаправляется соответствующим образом на нужный контроллер и действие, но если URL-адрес содержит только путьпока имя модуля не будет возвращено Rails routes ActionController::UnknownAction, я не знаю почему, так как я уже определил контроллер и действие.

1 Ответ

1 голос
/ 07 октября 2011

В Rails 3.1 вы можете сделать это в своем файле маршрутов, чтобы получить то, что вы хотите:

match '/document_managers/:module', 
  :controller => "document_managers",
  :action => :new_tree, 
  :constraints => {:module => /[ABC]/}
...