代码之家  ›  专栏  ›  技术社区  ›  kush

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

  •  12
  • kush  · 技术社区  · 16 年前

    现在我有一个导航部分,看起来像这样(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 回复  |  直到 16 年前
        1
  •  9
  •   Florian Greinacher    10 年前

    与Chuck所说的类似:

    <% TARGETS.each do |target| %>
      <li>
        <%= link_to target.humanize, 
          { :controller => target }, 
          class => ('active' if current_controller == target)) %>
      </li>
    <% end %>
    
        2
  •  3
  •   Chuck    16 年前

    很容易看出重复的地方。这都是一般形式:

    <% 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>
    
        3
  •  2
  •   sth    15 年前

    退房 rails-widgets 在github上。除了导航之外,它还为rails UI提供了大量方便的帮助(选项卡导航、工具提示、表格化、显示隐藏切换、简单的css进度条)。

    这是你的电话号码 docs

        4
  •  1
  •   zenazn    16 年前

    link_to_unless_current . 不完全是你想要的,但很接近。

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

        5
  •  1
  •   sth    15 年前

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

        6
  •  1
  •   vrish88    11 年前

    一个稍微不同的版本w/链接到当前版本,除非当前版本:

    <ul>
    <% links.each do |link| -%>
    <li><%= link_to_unless_current link.humanize, { :controller => target } %></li>
    <% end -%>
    </ul>