¿Cómo obtener el controlador actual para una URL en Rails?

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?

preguntado el 30 de junio de 12 a las 16:06

4 Respuestas

Puedes usar controller_name para obtener el nombre del controlador actual.

Respondido el 26 de junio de 15 a las 03:06

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' : '' - rfunduk

Podrías, como, expresarlo con expresión regular... :class => path =~ params[:controller] ? 'active' : ''... pero eso me parece asqueroso. - rfunduk

Las guías recomiendan usar controller_name en lugar de params[:controller]. - jdoe

usar controller_name y/o action_name es la forma habitual de resolver este problema: sist.

Esto se podría solucionar con:

Rails.application.routes.recognize_path(link_path)[:controller]

respondido 15 nov., 12:12

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

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 or haz tu propia pregunta.