检查Rails 3中是否存在路由

时间:2011-06-19 00:43:14

标签: ruby-on-rails ruby ruby-on-rails-3 routing

我们可以检查/测试Rails中是否存在路由吗?

例如,我想显示一个导航栏,它应该显示所有菜单的URL,无论URL是否存在。 (两者之间不同,破碎的网址会使用不同的样式)。

显示每个菜单的代码如下所示:

%li= link_to_unless_current menu.name, :controller => menu.controller, :action => menu.action

但是,如果提供的控制器和操作路由不存在,Rails会投诉并抛出异常。

在执行上述代码之前,Rails是否具有检查功能?也许,看起来像这样:

-if some_function_to_check_route_existence?(:controller => menu.controller, :action => menu.action)

编辑:

不是使用菜单的“controller”和“action”列,而是使用“url”列。现在,我可以这样做:

- if Menu.root
      - for menu in Menu.root.self_and_descendants
        - if menu.url
          %li= link_to_unless_current menu.name, menu.url
        - else
          %li= menu.name

我也可以使用rails函数来确定路由的存在,例如:

Rails.application.routes.recognize_path

2 个答案:

答案 0 :(得分:6)

这个怎么样:

<% link_to @post.title, post_path if post_path %>

答案 1 :(得分:0)

您可以使用begin rescue代替检查存在

route_exist = true
begin
    url_for(:controller => menu.controller, :action => menu.action)
rescue
    # route not exist
    route_exist = false
end

if route_exist
   ...
else
   ...
end