Ruby on Rails Menù
In molte interfacce viene utilizzato un menù in cui, durante la navigazione, la voce selezionata assume uno stile diverso dalle altre, attraverso l’assegnazione di una classe (es. “selected”) sulla base della pagina corrente.
Questo tipo di effetto può essere ottenuto in vari modi, ad esempio assegnando la classe “selected” in base ai valori assunti dal current_controller e dalla current_action.
Personalmente preferisco un approccio più semplice, pragmatico e flessibile.
Scriviamo un helper di questo tipo:
1 2 if instance_variable_get("@current__item") == key 3 link_to content_tag(:span, key.to_s), path, :class => "selected" 4 else 5 link_to content_tag(:span, key.to_s), path 6 end 7 end
Utilizzando l’helper possiamo scrivere un menù nel modo seguente:
1 2 3 4 5
A questo punto basterà impostare (ad esempio attraverso un before_filter) la variabile @current_first_level_item con un valore tra :home, :about o :projects nei controller per selezionare la voce corrente. Scegliendo valori diversi del paramentro type il controllo verrà fatto su variabili diverse e sarà quindi molto semplice far convivere con lo stesso sistema menù diversi, ad esempio un menù di primo livello ed uno di secondo livello.
La flessibilità deriva dal fatto che in ogni action siamo “liberi” di selezionare le giuste voci di ogni menù, svincolandoci da sistemi più rigidi basati sull’url.