2015-01-22 2 views
0

Всякий раз, когда у меня есть ошибка маршрутизации, я всегда заканчиваю цикл «change config/routes.rb», перезагружает страницу, просматривает файл журнала, чтобы увидеть, какой контроллер/действие называется «изменить», , Это довольно медленно, так как рассматриваемое приложение очень велико и загрузка среды (которая выполняется по каждому запросу в режиме dev) занимает значительное время.Rails 2.2.2: быстрая проверка маршрутов

Кто-нибудь знает способ просто запросить только маршрутизатор, например, вызвать маршрутизатор с URL-адресом и получить хэш-контроллер, действие & params назад, без необходимости загружать все мое приложение каждый раз?

Это для рельсов 2.2.2 приложение кстати. (Да я знаю, что я должен обновить, не вариант атм, к сожалению)

+0

'рейковые маршруты' должны работать на 2.2.2. –

+0

'rake routes' действительно работает, но это не совсем то, что мне нужно. «rake routes» - это как программа или формула, я после результатов запуска программы/формулы с конкретным вводом, если вы знаете, что я имею в виду. –

ответ

2

Посмотрите маршрутизации утверждений контроллера Действие:

actionpack/lib/action_controller/assertions/routing_assertions.rb

0

Я понял, как это сделать: ключ был ActionController::Routing::Routes который возвращает карту построенных маршрутов, и вызванный этим метод recognize_path.

def test_route(url, method = :get) 
    method = method.to_s.downcase.to_sym 
    uri = Addressable::URI.parse(CGI.unescape(url)) 
    path = uri.path 
    params = uri.query_values || {} 
    routes = ActionController::Routing::Routes;false 
    begin 
    routes_hash = routes.recognize_path(path, {:method => method}) 
    HashWithIndifferentAccess.new(routes_hash.merge(params)) 
    rescue ActionController::RoutingError 
    return nil 
    rescue Exception => e 
    raise $! 
    end 
end 

если карта маршрутов не может решить маршрут будет поднимать ActionController::RoutingError исключения, и я поймать этого и возвращать ноль, чтобы показать, что нет соответствующего маршрута не был найден. Любые другие исключения просто подпрыгивают.