我想知道是否可以将任意路径映射到路径
recogn_request_for完成了我想要的东西,但我无法让它在我的控制器中工作。
具体来说,如何执行recognized_request_for或从我的控制器执行相同任务的内容?
答案 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" }