Rails - 选择当前菜单项

时间:2010-01-22 21:36:35

标签: ruby-on-rails

我做了一个小帮手,增加了class="selected"。主要是使用current_page?来调查当前路径是否是当前菜单项,并选择它。

module MenuHelper
  #renders menu items and emphasizes current menu item
  def topmenu
    pages = {
      "products" => admin_products_path,
      "categories" => admin_categories_path,
      "catalogs" => admin_catalogs_path,
      "sales channels" => admin_sales_channels_path
    }
    pages.map do |key, value|
      classnames = %( class="current") if current_page?(value)
      "<li#{classnames}>#{link_to(key, value)}</li>"
    end
  end
end

在/layouts/application.html.erb中:

<ul class="topmenu">
<%= topmenu %>
</ul>

我的方法存在很大的缺陷。选择/admin/catalogs就像魅力一样。但是任何子页面都没有(/admin/catalogs/1等)

我认为我的方法可能会因current_page?方法

的限制而受到影响

您对如何增强此脚本以接受类似网址有什么想法,还是有更聪明的方法来实现它?

4 个答案:

答案 0 :(得分:5)

链接的简单方法:

def current_link_to label, path
  link_to label, path, class: (current_page?(path) ? "active" : nil)
end

答案 1 :(得分:3)

我构建类似菜单助手的方法是查看controller_nameaction_name属性,然后决定是否选择/激活给定页面。这不像完整的URL那么具体,所以可能有用。

search_page_active = controller.controller_name == 'students' && \
                     controller.action_name == 'search'

答案 2 :(得分:2)

在我的情况下,我有很多名称间隔控制器,这就是为什么我喜欢显示当前视图是否也在菜单路径中,我使用了Michael van Rooijen的解决方案然后我自定义我的情况。

辅助

def cp(path)
  "current" if request.url.include?(path)
end

视图

<%= link_to "All Posts", posts_path, class: cp(posts_path) %>

现在,如果我的菜单栏是/ users,而我的当前页面是/ users / 10 / post,那么链接/用户设置为“当前”类

答案 3 :(得分:0)

您可以使用link_to_unless_current