Tengo algunas páginas estáticas en un menú de navegación. Quiero agregar una clase como "actual" al elemento que se muestra actualmente.
La forma en que lo estoy haciendo es agregar toneladas de métodos auxiliares (cada uno para un elemento) para verificar el controlador y la acción.
def current_root_class
'class="current"' if controller_name == "homepage" && action_name == "index"
end
<ul>
<li <%= current_root_class %>><%= link_to "Home", root_path %>
¿¡Hay alguna manera mejor de hacerlo !? Mi forma actual es tan estúpida ...
navigation
ruby-on-rails-3
PeterWong
fuente
fuente
controller_name
y enaction_name
lugar de params probablementeHice un ayudante llamado
nav_link
:usado como:
que producirá HTML como
fuente
Utilice el
current_page?
asistente para determinar si debe o no asignar la"current"
clase. Por ejemplo:Nota También puede pasar una ruta de acceso (no sólo un hash de opciones), por ejemplo:
current_page?(root_path)
.fuente
Utilizo esta función nav_link (texto, enlace) en application_helper.rb (Rails 3) para hacer el trabajo y me envía los enlaces de la barra de navegación de twitter 2.0 de bootstrap.
Ejemplo:
fuente
current_page?
método, como en otras respuestas.La forma en que lo hice es agregar una función de ayuda en el application_helper
Luego en la navegación
Esto prueba la ruta del enlace con el uri de la página actual y devuelve su clase actual o una cadena vacía.
No lo he probado a fondo y soy muy nuevo en RoR (me mudé después de una década con PHP), así que si esto tiene un defecto importante, me encantaría escucharlo.
Al menos de esta manera solo necesita 1 función auxiliar y una simple llamada en cada enlace.
fuente
Para construir a partir de la respuesta de @Skilldrick ...
Si agrega este código a application.js, se asegurará de que cualquier menú desplegable con niños activos también se marque como activo ...
Para recapitular el código de apoyo> Agregue un ayudante llamado nav_link:
usado como:
que producirá HTML como
fuente
Creo que la mejor manera es
application_helper.rb:
Y en el menú:
fuente
<%= content_tag(:li, "Click me", class: is_active('controller', 'action')) %>
, no imprimirá un atributo de clase para nil. apidock.com/rails/ActionView/Helpers/TagHelper/content_tagSé que es una respuesta desactualizada, pero puede ignorar fácilmente todas estas verificaciones de la página actual mediante el uso de un contenedor link_to helper, llamado active_link_to gem, funciona exactamente lo que desea, agregue una clase activa al enlace de la página actual
fuente
Aquí está el ejemplo completo, sobre cómo agregar una clase activa en la página del menú de arranque en la vista de rieles.
fuente
Utilizo una joya increíble llamada Tabs on Rails .
fuente
Tengo una versión más sucinta de nav_link que funciona exactamente como link_to, pero está personalizada para generar una etiqueta li envolvente.
Ponga lo siguiente en su application_helper.rb
Si observa el código anterior y lo compara con el código link_to en url_helper.rb, la única diferencia es que verifica si la URL es la página actual y agrega la clase "activa" a una etiqueta li envolvente. Esto se debe a que estoy usando el ayudante nav_link con el componente de navegación de Twitter Bootstrap, que prefiere que los enlaces se envuelvan dentro de las etiquetas li y que la clase "activa" se aplique al li exterior.
Lo bueno del código anterior es que le permite pasar un bloque a la función, al igual que puede hacer con link_to.
Por ejemplo, una lista de navegación de arranque con iconos se vería así:
Delgado:
Salida:
Además, al igual que link_to helper, puede pasar opciones HTML a nav_link, que se aplicará a la etiqueta a.
Un ejemplo de pasar un título para el ancla:
Delgado:
Salida:
fuente
Para mí, personalmente, utilicé una combinación de respuestas aquí.
Estoy usando materialize css y mi forma de hacer que las categorías principales sean plegables es usando el siguiente código
espero que ayude a alguien
fuente
El
current_page?
método no es lo suficientemente flexible para mí (digamos que configura un controlador pero no una acción, entonces solo devolverá verdadero en la acción de índice del controlador), así que hice esto en función de las otras respuestas:Ejemplo:
fuente
¡Sí! Consulte este artículo: Una mejor manera de agregar una clase 'seleccionada' a enlaces en rieles
Suelta nav_link_helper.rb en app / helpers y puede ser tan fácil como:
El ayudante nav_link funciona igual que el ayudante link_to estándar de Rails, pero agrega una clase 'seleccionada' a su enlace (o su envoltorio) si se cumplen ciertos criterios. De forma predeterminada, si la URL de destino del enlace es la misma que la URL de la página actual, se agrega una clase predeterminada de 'seleccionado' al enlace.
Aquí hay una esencia: https://gist.github.com/3279194
ACTUALIZACIÓN: Esto ahora es una joya: http://rubygems.org/gems/nav_link_to
fuente
Utilizo un ayudante simple como este para los enlaces de nivel superior para que la
/stories/my-story
página resalte el/stories
enlacefuente
Déjame mostrarte mi solución:
_header.html.erb :
application_helper.rb :
application_controller.rb :
fuente
De acuerdo con la respuesta de Skilldrick , la cambiaré por la siguiente:
para hacerlo mucho más útil.
fuente
Esta versión se basa en la de @ Skilldrick, pero le permite agregar contenido html.
Por lo tanto, puede hacer:
nav_link "A Page", a_page_path
pero también:
o cualquier otro contenido html (puede agregar un icono, por ejemplo).
Aquí el ayudante es:
fuente
Creo que se me ocurrió una solución simple que podría ser útil para muchos casos de uso. Esto me permite:
link_to
(por ejemplo, agregue un icono dentro del enlace)application_helper.rb
active
al nombre de clase completo del elemento de enlace en lugar de ser la única clase.Entonces, agregue esto a
application_helper.rb
:Y en su plantilla puede tener algo como esto:
Como beneficio adicional , puede especificar o no un
class_name
y usarlo así:<div class="<%= current_page?(root_path) %>">
Gracias a las respuestas anteriores 1 , 2 y recursos .
fuente
todos estos funcionan con barras de navegación simples, pero ¿qué pasa con el submenú desplegable? cuando se selecciona un submenú, el elemento del menú superior debe hacerse 'actual' en este caso, tabs_on_rails, yo seré la solución
fuente
Así es como resolví en mi proyecto actual.
Luego..
fuente
Mi manera fácil -
application.html.erb
,main_controller.erb
,Gracias.
fuente
Si también desea admitir el hash de opciones html en la vista. Por ejemplo, si desea llamarlo con otra clase o id de CSS, puede definir la función auxiliar de esta manera.
Entonces, en la vista, llame a este asistente de la misma manera que llamaría link_to helper
fuente
Cree un método
ApplicationHelper
como se muestra a continuación.Ahora utilícelo a la vista como los siguientes casos de uso.
1. Para todas las acciones de cualquier controlador específico
2. Para todas las acciones de muchos controladores (separados por comas)
3. Para la acción específica de cualquier controlador específico
4. Para acciones específicas de muchos controladores (separados por comas)
5. Para algunas acciones específicas de cualquier controlador específico
6. Para algunas acciones específicas de muchos controladores (con comas separadas)
Espero eso ayude
fuente