30-12-2011, 03:30 PM
Je vois trois gros défauts dans ton implémentation :
Je partirais plutôt sur :
Aucun nom ne me vient à l'esprit en y réfléchissant rapidement. Pour moi c'est révélateur du peu d'intérêt de la méthode.
J'écrirais donc manuellement :
Ou sinon je me ferais des helpers au cas par cas. C'est bien suffisant dans la mesure où ce besoin est plutôt limité (généralement c'est pour un menu de navigation) et qu'en général, les conditions pour indiquer qu'on est dans une section sont potentiellement plus complexes que la correspondance exacte du chemin.
Par exemple si je fais un lien vers la section "Aide" dans mon menu de navigation, le lien sera mis en évidence quelle que soit la page d'aide sur laquelle je me trouve (/help, /help/pricing, /help/bugs, /help/bugs/42, etc.).
- Le nom est mauvais. Il n'est pas révélateur du rôle de la méthode.
- L'utilisation de
update
altère le hash d'options (pénible si le développeur souhaite le réutiliser). Mieux vaut utilisermerge
.
- Si l'utilisateur fournit déjà une classe, elle est écrasée.
Je partirais plutôt sur :
def some_better_name(label, path, options = {})
classNames = (options[:class] || '') << (current_page?(path) ? ' active' : '')
options = options.merge(class: classNames)
link_to(label, path, options)
end
Aucun nom ne me vient à l'esprit en y réfléchissant rapidement. Pour moi c'est révélateur du peu d'intérêt de la méthode.
J'écrirais donc manuellement :
link_to("Home", root_path, class: current_page?(root_path) && :active)
Ou sinon je me ferais des helpers au cas par cas. C'est bien suffisant dans la mesure où ce besoin est plutôt limité (généralement c'est pour un menu de navigation) et qu'en général, les conditions pour indiquer qu'on est dans une section sont potentiellement plus complexes que la correspondance exacte du chemin.
Par exemple si je fais un lien vers la section "Aide" dans mon menu de navigation, le lien sera mis en évidence quelle que soit la page d'aide sur laquelle je me trouve (/help, /help/pricing, /help/bugs, /help/bugs/42, etc.).