如何在rails应用程序中获取路径?

时间:2014-06-27 16:51:22

标签: 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.recognize_path('/my/path/23/edit')

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

在这两种情况下,我都会收到“RuntimeError:route set not finalized”。

我正在通过ActionDispatch代码深入研究它,但如果有人知道它们的顶部答案,那将节省我相当长的时间。所以谢谢!

1 个答案:

答案 0 :(得分:3)

规范的答案实际上是在我的问题中给出的:

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

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

看起来它不起作用,因为我之前曾尝试手动初始化RouteSet,这干扰了环境正确加载路线的能力。当我重新启动控制台会话时,上述命令工作正常。