¿Cómo obtener el controlador actual para una URL en Rails?
Frecuentes
Visto 12,142 equipos
3
Estoy usando este código para resaltar la pestaña del menú actualmente activa con Twitter Bootstrap:
def nav_link_to(link_text, link_path, options = nil)
class_name = current_page?(link_path) ? 'active' : ''
content_tag(:li, :class => class_name) do
link_to link_text, link_path, options
end
end
Por supuesto, esto hace que el enlace esté activo, solo si el enlace dado ES la página actual. ¿Cómo puedo cambiar esta función, de modo que devuelva 'activo' para cualquier enlace debajo del controlador actual? En otras palabras, para todas las acciones del controlador de publicaciones, ¿los enlaces estarían activos?
4 Respuestas
15
Puedes usar controller_name
para obtener el nombre del controlador actual.
Respondido el 26 de junio de 15 a las 03:06
6
Esto se podría solucionar con:
Rails.application.routes.recognize_path(link_path)[:controller]
respondido 15 nov., 12:12
5
params[:controller]
devuelve el nombre del controlador con su espacio de nombres.
Si desea obtener el nombre del controlador, solo debe usar controller.controller_name
.
class Admin::Posts; end
# from the view
params[:controller]
=> 'admin/posts'
controller.controller_name
=> 'posts'
Respondido el 11 de junio de 14 a las 10:06
0
No estoy seguro si leí esto correctamente, pero no debería usar un parámetro get para ver el controlador actual.
¿Has probado usar request.path
? En otras palabras, verifique si alguno de los enlaces a continuación incluye 'request.path' en su ruta...
Respondido el 24 de junio de 13 a las 18:06
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas ruby-on-rails url twitter-bootstrap or haz tu propia pregunta.
Sí, pero la pregunta era: ¿cómo verifico que un enlace o URL pertenezca a algún controlador? De eso se trata el código. - Halcón
tu no Pero puedes usarlo manualmente:
link_to 'posts', posts_path, :class => params[:controller] == 'posts' ? 'active' : ''
- rfundukPodrías, como, expresarlo con expresión regular...
:class => path =~ params[:controller] ? 'active' : ''
... pero eso me parece asqueroso. - rfundukLas guías recomiendan usar
controller_name
en lugar deparams[:controller]
. - jdoeusar controller_name y/o action_name es la forma habitual de resolver este problema: sist.