Rails:处理导航的优雅方式?

时间:2009-03-01 23:49:27

标签: ruby-on-rails

现在我的导航部分看起来像这样(x10按钮)......

<% if current_controller == "territories" %>
    <li><%= link_to "Territories", {:controller => 'territories'}, :class => 'active'  %></li>
<% else %>
    <li><%= link_to "Territories", {:controller => 'territories'}  %></li>
<% end %>
<% if current_controller == "contacts"  %>
    <li><%= link_to "Contacts", {:controller => 'Contacts'}, :class => 'active'  %></li>
<% else %>
    <li><%= link_to "Contacts", {:controller => 'Contacts'}  %></li>
<% end %>

这样做有更优雅/干燥的解决方案吗?

6 个答案:

答案 0 :(得分:9)

与Chuck所说的相似:

<% TARGETS.each do |target| %>
  <li>
    <%= link_to target.humanize, 
      { :controller => target }, 
      class => ('active' if current_controller == target)) %>
  </li>
<% end %>

答案 1 :(得分:3)

很容易看到重复的位置。这是一般的形式:

<% if current_controller == XXXXX %>
  <li><%= link_to XXXXX, {:controller => XXXXX}, CLASS %></li>
<% else %>
  [do the same stuff minus ":class => 'active'"]
<% end %>

所以我们希望XXXXX和CLASS是变量(因为那些是唯一可以改变的东西),其余的可以是一个简单的模板。

所以,我们可以这样做:

%w(Contacts Territories).each |place|
  <% class_hash = current_controller == place ? {:class => 'active'} : {}
  <li><%= link_to place, {:controller => place}, class_hash)</li>

答案 2 :(得分:2)

在github上查看rails-widgets。除了导航之外,它还为rails UI(Tabnavs,工具提示,分类器,show hide toggle,简单的css进度条)提供了大量便利助手。

以下是docs

答案 3 :(得分:1)

结帐link_to_unless_current。不完全是你要求的,但它很接近。

此外,您可以将这种逻辑放在帮助器中以将其抽象出视图。

答案 4 :(得分:1)

与link_to_unless_current:

略有不同的版本
<ul>
<% links.each do |link| -%>
<li><%= link_to_unless_current link.humanize, { :controller => target } %></li>
<% end -%>
</ul>

像这样的东西的好资源是rails docs。

答案 5 :(得分:1)

查看simple-navigation plugin。它是一个“易于使用”的rails插件,用于为rails应用程序创建导航。