Rails 2.2.2:快速测试路线

时间:2015-01-22 11:35:42

标签: ruby-on-rails routes

每当我遇到路由错误时,我总是会经历一个"更改config / routes.rb,重新加载页面,查看日志文件以查看调用哪个控制器/操作"的循环。它很慢,因为有问题的应用程序非常大并且加载环境(在开发模式下在每个请求上完成)需要很长时间。

有没有人知道单独查询路由器的方法,例如使用url调用路由器并获取控制器,操作和放大器的哈希值。回复,而不必每次都加载我的整个应用程序?

这是针对rails 2.2.2 app btw。 (是的,我知道我应该更新,不幸的是不能选择atm)

2 个答案:

答案 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,表示没有找到匹配的路线。任何其他例外情况都会被反弹。