给定一个方法和路径,我想问Rails该请求将如何路由,我希望能够从控制台和/或从rake任务做到这一点。我认为这应该是直截了当的——ActionDispatch对每个请求都这样做,路由测试方法显然也这样做。
(当前:Rails 3.0。但是对于我正在编写的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 finished "。
我正在慢慢地钻研ActionDispatch代码,但如果有人知道答案,那将节省我相当多的时间。所以,谢谢你们!
规范的答案实际上是在我的问题中给出的:
# GET request
Rails.application.routes.recognize_path('/some/path/63')
# POST request
Rails.application.routes.recognize_path('/some/path', {:method => :post })
看起来没有工作,因为我之前尝试手动初始化RouteSet,这干扰了环境正确加载路由的能力。当我重新启动控制台会话时,上面的命令工作正常。