确定路径是否作为Rails控制器中的路由存在

时间:2010-07-17 23:51:19

标签: ruby-on-rails routing

我想知道是否可以将任意路径映射到路径

recogn_request_for完成了我想要的东西,但我无法让它在我的控制器中工作。

具体来说,如何执行recognized_request_for或从我的控制器执行相同任务的内容?

5 个答案:

答案 0 :(得分:23)

对于Rails 3,呼叫是

Rails.application.routes.recognize_path

而不是

ActionController::Routing::Routes.recognize_path

实施例:

def path_exists?(path)
  begin
    Rails.application.routes.recognize_path(path)
  rescue
    return false
  end

  true
end

答案 1 :(得分:8)

答案 2 :(得分:0)

您可以动态生成路由助手方法并查看它是否存在(使用respond_to?或者甚至只捕获任何抛出的异常)。

答案 3 :(得分:0)

如果要连接控制器和操作的任意路径,可以使用map.connect

map.connect '/any/random/string/of/stuff', :controller => 'items', :action => 'new'

您甚至可以在路径中调出嵌入式参数名称:

map.connect '/seeking/room/for/[:number_of_nights]/nights', :controller => 'rooms', :action => 'index'

使用上面的内容,您将收到url中表示的值,作为控制器中params哈希的一部分。

答案 4 :(得分:0)

我最近遇到了一个问题,我必须检查路径是否存在给定一系列可能的路径。我曾尝试过上述建议Rails.application.routes.recognize_path,但是从rails 4.2.1开始,它已被禁止了。我使用以下代码:

Rails.application.routes.named_routes.routes.any?{ |key, value| key.to_s === "new_article" }