2010-09-26 24 views

Répondre

2

Je ne sais pas si je vais vous donner une façon intelligente, mais mieux quelque chose que rien ...

Si votre menu a des liens - ce n'est pas dans votre exemple mais je suppose que le menu réel devrait avoir des liens, pas seulement les éléments. Par exemple quelque chose comme ça dans HAML: (J'utilise HAML comme l'écriture ERB dans la zone de texte est l'enfer pur)

%ul 
    %li= link_to "Home", :controller => "home" 
    %li= link_to "Books", :controller => "books" 
    %li= link_to "Pages", :controller => "pages" 

Ensuite cette aide (collé de mon projet) devrait venir à portée de main:

# 
# Shows link with style "current" in case when the target controller is same as 
# current 
# beware: this helper has some limitation - it only accepts hash as URL parameter 
# 
def menu_link_to(title, url, html_options = {}) 
    unless url.is_a?(Hash) and url[:controller] 
    raise "URL parameter has to be Hash and :controller has to be specified" 
    end 

    if url[:controller] == controller.controller_path 
    html_options[:class] = "current" 
    end 

    link_to(title, url, html_options) 
end 

Avec cette aide, vous pouvez remplacer votre "link_to" dans le code ci-dessus par "menu_link_to" et c'est tout!

1

Une version modifiée de l'assistant de Radek Paviensky est un peu plus simple et plus similaire à link_to.

# Shows link with style "current" in case when the target controller is same as 
    # current. 
    def menu_link_to(title, options = {}, html_options = {}) 
    if current_page?(options) 
     html_options[:class] ||= [] 
     html_options[:class] << "active" # @TODO catch cases where the class is passed as string instead of array. 
    end 

    link_to(title, options, html_options) 
    end 
Questions connexes