J'ai une liste d'onglets en haut de mon application que j'inclus dans une mise en page générale dans application.html.erb. Ils ressemblent à ceci: Je veux modifier l'onglet sélectionné en "actuel", lorsque je frappe cette page. Donc, lorsque je clique sur Modifier le profil et la page Modifier la page de profil, les onglets doivent apparaître comme suit: P> <li><%= link_to "Home", provider_path(current_user.id), :method=> "GET"%> </li>
<li class="current"><%= link_to "Edit Profile", edit_student_path(current_user.id) %> </li>
<li><%= link_to "Search", provider_search_path %> </li>
8 Réponses :
Lorsque vous changez de pages, vous pouvez passer quelque chose comme @Current_tab Retour à l'ERB à partir des méthodes du contrôleur. Ensuite, utilisez @Current_Tab pour décider quel LI devrait être la classe actuelle. Sinon, vous pouvez donner à chaque li et identifiant ou un attribut unique et simplement changer la classe avec votre cadre de choix JavaScript. P>
Je suis si em> ne prétendez pas que c'est le meilleur moyen de le faire, mais je suis assez courageux pour publier ce que j'ai proposé :) Quelques règles de menu de ma disposition: p> puis j'ai créé cette aide: p>
Andy- Merci pour votre réponse. Question rapide: Où vous proposez-vous le nom de contrôle et Action_Name utilisées pour les comparaisons? Merci.
api.rubyonrails.org/classes/actioncontroller/base.html - Mettez ceci Méthode dans votre applicationHelper et cela fonctionnera. Rien contre les autres réponses, mais une fois que vous les essayez donnez à la mienne un coup, c'est un peu plus sec imo - conserve toute la logique au même endroit au lieu de chaque élément de menu qui garde la vue propre.
Vous pouvez essayer quelque chose comme: ... et vérifiez simplement quel contrôleur vous venez. P> P>
KCHAU- Merci pour cette réponse. Cela a du sens intuitivement, mais si deux onglets proviennent du même contrôleur? Je ne pense pas qu'il existe une méthode Controller.Controller_Action, alors d'où allons-nous de là?
Pour les onglets provenant du même contrôleur, pour ceux spécifiques que vous pouvez simplement repousser une valeur @Current à la vue. Je ne peux pas penser à une façon plus sèche de le faire au sommet de ma tête. Si je le fais, je serai sûr de poster.
Dave, si votre action est dans vos paramètres de l'URL ou que quelque chose identifie le chemin de l'URL, vous pouvez également utiliser cela dans la vue ... Donc, si vous saviez votre action de l'URL, vous pouvez faire quelque chose comme:
Donc, apparemment, il existe une méthode contrôleur.Action_Action qui résout tous nos problèmes. J'ai dû donner le chèque ci-dessous pour avoir une réponse complète, mais je suis allé de l'avance et j'ai évité votre réponse. Apprécier le travail.
Vous pouvez utiliser donc ce serait donc quelque chose comme p> Je pense qu'il y a des moyens d'obtenir l'URL actuelle de la page sur laquelle vous vous trouvez, mais que votre style "actif" dépendra uniquement de cette action Via ce chemin, qui peut ne pas toujours être le cas en fonction des itinéraires, cette manière garantira que la vue montre ce qui est vrai en fonction de ce qui était réellement exécuté, et non de ce que l'URL est dans la barre d'adresse P> P> contrôleur.class == code> et contrôleur.action_name == code> pour déterminer exactement quel contrôleur et action vous êtes sur
Ahh merci. Ce contrôleur.Action_Action est exactement ce dont j'avais besoin. Je vais donner celui-ci un chèque depuis sa solution finale, mais j'aimerais pouvoir donner la moitié et la moitié.
Vous pouvez simplement faire cela:
<%= current_page?(:controller => 'your_controller', :action => 'index') ? 'current' : '' %>
J'ai fait une aide à cela qui peut accepter un nombre quelconque d'arguments utiles pour les ressources imbriquées, mais elle accepte également un nom de contrôleur unique, comme les autres réponses.
%li{:class => is_active('blogs', 'comments')}
C'est une bonne truc. J'ajoute "retour nul" à l'intérieur is_actif pour vous assurer qu'il ne renvoie rien pour des onglets inactifs.
Je l'ai fait dans l'aide de l'application et il semble fonctionner correctement: Appelez comme ceci: p>