确定路径是否作为Rails控制器中的路由存在
我想知道是否可以将任意路径映射到路由
recogn_request_for完成了我想要的东西,但我不能让它在我的控制器中工作。
具体来说, 我如何执行recogn_request_for或从我的控制器执行相同任务的东西?
我无法评论克里斯托弗的解决方案,但对于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
解:
@related_page_path = '/' + @page.path begin ActionController::Routing::Routes.recognize_path(@related_page_path, :method => :get) rescue @related_page_path = nil end
您可以动态生成路由助手方法并查看它是否存在(使用respond_to?或者甚至只捕获任何抛出的exception)。
如果要连接控制器和操作的任意路径,可以使用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
散列的一部分。
我最近遇到了一个问题,我必须检查路径是否存在给定一系列可能的路径。 我已经尝试了上面的建议Rails.application.routes.recognize_path
,但是它从rails 4.2.1
就被禁止了。 我使用以下代码:
Rails.application.routes.named_routes.routes.any?{ |key, value| key.to_s === "new_article" }