Menús dinámicos
Posted by vigosan, Mon Feb 25 12:24:00 UTC 2008
No se si el título refleja exactamente lo que pretendo hacer, pero de lo que se trata es de ayudarnos de algún helper para tener nuestro propio constructor de menús; voy a comentaros mi idea y si alguien tiene alguna mejor que la comente.
Primero en application.rb he defino la estructura que tendrá el menú, utilizando arrays, y en los que indico el nombre del enlace y la url. Además, mostrará un menú diferente dependiendo si el usuario está validado o no.
# application.rb
helper_method navigation_links
def navigation_links
if logged_in?
return [
[ "Logout", "#{logout_path}" ]
]
else
return [
[ "Home", "#{root_path}" ],
[ "Log in", "#{login_path}" ],
[ "Signup", "#{signup_path}" ]
]
end
end
Ahora application_helper.rb escribo las funciones que generarán el menú:
def link_for(label, path = {})
if controller.controller_name == path.split("/").last
content_tag :li, link_to(label, path, { "class"=> "current" })
else
content_tag :li, link_to(label, path)
end
end
def links_for_navigation(options = {})
class_name = options[:class] || "navigation_links"
code = "<ul class=\"#{class_name}\">\n"
links = []
navigation_links.each do |label, path|
links.push link_for(label, path)
end
code << links.join(separator)
code << "</ul>"
end
def separator
# quitar comentario si quieres añadir un separador
# %{ <span class="separator"> | </span> }
end
Y en la vista:
<div id="sidebar"> <%= links_for_navigation %> </div>
Lo dicho, si alguien tiene una idea mejor, que no dude en compartirla.