当用户在某个子页面上时,我有以下代码表示一个活动选项卡,在本例中是用户索引视图。
<li class="<%='active' if current_page?(users_path) %>">
<%= link_to 'Users', users_path %></li>
我希望每当用户出现在任何一个节目,编辑或索引页面时,该标签显示为“活动”。
我试过这样的事情:
<li class="<%='active' if current_page?(users_path || edit_user_path || user_path) %>">
<%= link_to 'Users', users_path %></li>
但只识别users_path。
在current_page方法中构建OR语句的正确方法是什么?
答案 0 :(得分:0)
应该是
<li class="<%='active' if current_page?(users_path) || current_page?(edit_user_path) || current_page?(user_path) %>">
如果你在很多页面上这样做,这将很难维护。你最好使用gem进行语义导航。
答案 1 :(得分:0)
这是我在以前的应用中使用的一些代码。
def nav_item(copy, link)
content_tag :li, class: nav_class(link) do
link_to copy, link
end
end
def nav_class(page)
case page
when :users then 'active' if request.path.match(/^\/users/)
when :projects then 'active' if request.path.match(/^\/projects/)
else
nil
end
end
如果路线与当前路径匹配,上面的两个辅助方法将在li
标记内呈现class="active"
的链接。
不在UsersController操作上:
<%= nav_item('Users', :users) %> #=> <li><a href="/users">Users</a></li>
在UsersController操作上:
<%= nav_item('Users', :users) %> #=> <li class="active"><a href="/users">Users</a></li>