Как мне получить маршрут для пути в приложении rails?

Учитывая метод и путь, я хочу спросить Rails, как этот запрос будет перенаправлен, и я хочу быть в состоянии сделать это из консоли и / или из задачи rake. Я полагаю, что это должно быть просто - ActionDispatch делает это для каждого запроса, и методы тестирования маршрута, очевидно, также делают это.

(В настоящее время: Rails 3.0.x, но для гема, который я пишу, мне понадобится сделать это как минимум в Rails 3.0 до 4.1, как минимум, и, возможно, в более старых версиях.)

Я пробовал несколько вещей, как это:

routes = ActionDispatch::Routing::RouteSet.new
routes.recognize_path('/my/path/23/edit')

или же

Rails.application.routes.recognize_path('/my/path/23/edit')

В обоих случаях я получаю обратно "RuntimeError: набор маршрутов не завершен".

Я изучаю код ActionDispatch, медленно прорабатывая его, но если кто-нибудь знает ответ на все сто, это сэкономит мне немало времени. Так что спасибо тебе!

1 ответ

Канонический ответ на самом деле такой, какой дан в моем вопросе:

# GET request
Rails.application.routes.recognize_path('/some/path/63') 

# POST request
Rails.application.routes.recognize_path('/some/path', {:method => :post })

Похоже, это не сработало, потому что я ранее пытался инициализировать RouteSet вручную, что мешало среде правильно загружать маршруты. Когда я перезапустил консольный сеанс, вышеприведенные команды работали нормально.

Другие вопросы по тегам