Rails:如何将OR语句传递给current_page方法?

时间:2013-03-10 01:01:15

标签: ruby-on-rails twitter-bootstrap

当用户在某个子页面上时,我有以下代码表示一个活动选项卡,在本例中是用户索引视图。

  <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语句的正确方法是什么?

2 个答案:

答案 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>