Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在rails应用程序中,如何获取路径的路由?_Ruby On Rails_Ruby_Ruby On Rails 3_Rails Routing_Actiondispatch - Fatal编程技术网

Ruby on rails 在rails应用程序中,如何获取路径的路由?

Ruby on rails 在rails应用程序中,如何获取路径的路由?,ruby-on-rails,ruby,ruby-on-rails-3,rails-routing,actiondispatch,Ruby On Rails,Ruby,Ruby On Rails 3,Rails Routing,Actiondispatch,给定一个方法和路径,我想询问Rails如何路由该请求,并且我希望能够从控制台和/或rake任务中完成这项工作。我认为这应该很简单——ActionDispatch对每个请求都这样做,路由测试方法显然也这样做 (目前:Rails 3.0.x,但对于我正在编写的gem,我至少需要能够在Rails 3.0到4.1中做到这一点,可能还需要在旧版本中做到这一点。) 我一直在尝试一些类似的事情: routes = ActionDispatch::Routing::RouteSet.new routes.rec

给定一个方法和路径,我想询问Rails如何路由该请求,并且我希望能够从控制台和/或rake任务中完成这项工作。我认为这应该很简单——ActionDispatch对每个请求都这样做,路由测试方法显然也这样做

(目前:Rails 3.0.x,但对于我正在编写的gem,我至少需要能够在Rails 3.0到4.1中做到这一点,可能还需要在旧版本中做到这一点。)

我一直在尝试一些类似的事情:

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

在这两种情况下,我都返回“RuntimeError:route set not finalized”


我正在潜入ActionDispatch代码,慢慢地计算出来,但是如果有人知道答案,这将为我节省大量时间。所以,谢谢你

标准答案实际上与我的问题中给出的一样:

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

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

这看起来不起作用,因为我以前曾尝试手动初始化RouteSet,这干扰了环境正确加载路由的能力。当我重新启动控制台会话时,上面的命令运行良好。

使用
Rails.application.routes.recognize\u path在我的系统上运行良好,因此命令是正确的。也许有些东西设置不正确?你想在哪里打这个电话?在进一步调查中,有一个
finalize方法(duh),但我在如上初始化时得到一个空路由集。所以我似乎遗漏了一些关于RouteSet初始化的内容。@Micah:我现在正试图在控制台中运行它,只是为了测试一下。一旦我让它工作起来,它就会进入一个gem,它会分析请求/响应对的记录,以确定在这些请求期间实际命中的唯一路由。显然,我得到了一个空路由集:
1.8.7-head:037>Rails.application.routes.routes=>[]
Ahha,所以有些设置不正确。或者更准确地说,设置被覆盖。很高兴你明白了。
# GET request
Rails.application.routes.recognize_path('/some/path/63') 

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