2009-03-01 18 views
11

Ahora mismo tengo una navegación parcial que tiene este aspecto (botones x10) ...Rieles: ¿Manera elegante de manejar la navegación?

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

¿Hay una solución más elegante/DRY para hacer esto?

Respuesta

8

En una línea similar a lo que dijo Chuck:

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

y ¿qué es TARGETS ?? – DaMainBoss

+0

¿Qué es TARGETS? Además, tu publicación tiene errores de sintaxis. – Dewayne

1

Consulte link_to_unless_current. No es exactamente lo que pediste, pero está cerca.

Además, podría poner este tipo de lógica en una ayuda para abstraerla de la vista.

3

Es bastante fácil ver dónde está la repetición. Es todo de la forma general:

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

por lo que queremos XXXXX y la clase a ser las variables (ya que esas son las únicas cosas que cambian) y el resto puede ser una simple plantilla.

Así, podríamos hacer algo como esto:

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

Una versión ligeramente diferente w/link_to_unless_current:

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

Un buen recurso para cosas como esta son los documentos de rieles.

2

Consulte rails-widgets en github. Proporciona una gran cantidad de ayudantes de conveniencia para las cosas de interfaz de usuario de rieles (tabnavs, información sobre herramientas, tableizadores, alternar show hide, barra de progreso css simple) además de la navegación.

Aquí están los docs

1

Mira la simple-navigation plugin. Es un complemento de rieles 'fácil de usar' para crear navegaciones para sus aplicaciones de rieles.

Cuestiones relacionadas