我做了一个小帮手,增加了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?
方法
您对如何增强此脚本以接受类似网址有什么想法,还是有更聪明的方法来实现它?
答案 0 :(得分:5)
链接的简单方法:
def current_link_to label, path
link_to label, path, class: (current_page?(path) ? "active" : nil)
end
答案 1 :(得分:3)
我构建类似菜单助手的方法是查看controller_name
和action_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
。