每当我遇到路由错误时,我总是会经历一个"更改config / routes.rb,重新加载页面,查看日志文件以查看调用哪个控制器/操作"的循环。它很慢,因为有问题的应用程序非常大并且加载环境(在开发模式下在每个请求上完成)需要很长时间。
有没有人知道单独查询路由器的方法,例如使用url调用路由器并获取控制器,操作和放大器的哈希值。回复,而不必每次都加载我的整个应用程序?
这是针对rails 2.2.2 app btw。 (是的,我知道我应该更新,不幸的是不能选择atm)
答案 0 :(得分:2)
查看Action Controller路由断言:
actionpack/lib/action_controller/assertions/routing_assertions.rb
答案 1 :(得分: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
异常,我抓住这个并返回nil,表示没有找到匹配的路线。任何其他例外情况都会被反弹。