2009-03-01 5 views
11

En ce moment, j'ai une navigation partielle qui ressemble à ceci (boutons x10) ...Rails: Manière élégante de manipuler la navigation?

<% 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 %> 

Y at-il une solution plus élégante/SEC pour ce faire?

Répondre

8

Dans une veine similaire à ce que Chuck a dit:

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

et qu'est-ce que TARGETS ?? – DaMainBoss

+0

Qu'est-ce que TARGETS? En outre, votre message contient des erreurs de syntaxe. – Dewayne

1

Découvrez link_to_unless_current. Pas exactement ce que vous avez demandé, mais c'est proche.

En outre, vous pouvez mettre ce type de logique dans une aide pour l'extraire de la vue.

3

Il est assez facile de voir où se trouve la répétition. Il est tout de la forme générale:

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

Nous voulons XXXXX et classe à des variables (puisque ce sont les seules choses qui changent) et le reste peut être un modèle simple.

Donc, nous pourrions faire quelque chose comme ceci:

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

Une version légèrement différente w/link_to_unless_current:

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

Une bonne ressource pour ce genre de choses sont les rails docs.

2

Découvrez rails-widgets sur github. Il fournit une tonne d'aides de commodité pour les trucs UI de rails (tabnavs, infobulles, tablesizer, montrer la bascule de cachette, barre de progression simple de css) en plus de la navigation.

Voici les docs

1

Vérifiez la simple-navigation plugin. C'est un plugin de rails 'facile à utiliser' pour créer des navigations pour vos applications rails.

Questions connexes