2010-10-21 5 views
2

J'ai un sous-menu dynamique qui est affiché en fonction de la page sur laquelle l'utilisateur se trouve. J'ai placé le code suivant dans une _sub_menu.html.erb partielle:Rendu d'un élément de menu actif dans un menu partiel dans les rails 3

<a href="/dashboard/index" class="current">Index</a> 
<a href="/dashboard/account">Account</a> 
<a href="/dashboard/payments">Payments</a>` 

De mon moi principale, j'appelle <%= render 'sub_menu' %>, qui fonctionne.

Cependant, je veux changer la partie class = "current" en fonction de la page sur laquelle l'utilisateur se trouve. J'espérais faire du rendu en passant dans un paramètre local et rendu selon, mais il semble hacky:

<%= render 'sub_menu' , :locals => {:active_item => 'payments'} %>

plus la logique devient vraiment laid. Existe-t-il une meilleure façon de le faire?

Répondre

2

Je pense que vous pouvez utiliser le paramètre de bloc à link_to_unless_current, qui fournit le contenu à rendre lorsque le lien est la page en cours:

<%= link_to_unless_current("Index", :action => 'index') { link_to("Index", {:action => 'index'}, {:class => 'current' }) %> 
<%= link_to_unless_current("Account", :action => 'account') { link_to("Account", {:action => 'account'}, {:class => 'current' }) %> 
<%= link_to_unless_current("Payments", :action => 'payments') { link_to("Payments", {:action => 'payments'}, {:class => 'current' }) %> 

Est-ce que le travail?

2

Vous pouvez définir une méthode d'aide supplémentaire, qui appellerait link_to_unless_current:

def link_to_current_with_class(name, current_class, options = {}, html_options = {}, &block) 
    link_to_unless_current(name, options, html_options) do 
    options[:class] = current_class + " " + options[:class] 
    link_to(name, options, html_options) 
    end 
end 

puis l'appeler de votre navigation partielle:

<%= link_to_current_with_class "Index", "current", "/dashboard/index" %>