Existe-t-il un moyen de déterminer le contrôleur actuel dans la vue?
Voici un exemple de la raison pour laquelle je voudrais savoir ceci: si plusieurs contrôleurs partagent la même présentation, il est possible que je fasse partie du fichier de présentation ERB dans lequel je souhaite mettre en surbrillance l'élément de menu de la page en cours en fonction du contrôleur.
Peut-être que c'est une mauvaise approche. Si tel est le cas, quel est le moyen préféré de le faire?
Cela m'intéresserait de savoir comment obtenir le nom du contrôleur actuel dans un sens ou dans l'autre.
(Évidemment, je pourrais mettre quelque chose comme @controller_name = 'users'
dans chaque contrôleur; mais cela semble être le genre de chose que Rails aurait déjà fait en coulisse. Je me demandais simplement s'il y avait une construction -de manière.)
controller_name
contient le nom du contrôleur utilisé pour servir la vue actuelle.
De plus, dans les Rails Guides, il est écrit:
Le hachage params contiendra toujours les clés: controller et: action, mais vous devez utiliser les méthodes controller_name et nom_action à la place pour accéder à ces valeurs
Supposons donc que vous avez une classe CSS active
, qui devrait être insérée dans tout lien dont la page est actuellement ouverte (peut-être pour que vous puissiez styler différemment). Si vous avez un contrôleur static_pages
avec une action about
, vous pouvez alors mettre le lien en surbrillance de la manière suivante:
<li>
<a class='button <% if controller.controller_name == "static_pages" && controller.action_name == "about" %>active<%end%>' href="/about">
About Us
</a>
</li>
#to get controller name:
<%= controller.controller_name %>
#=> 'users'
#to get action name, it is the method:
<%= controller.action_name %>
#=> 'show'
#to get id information:
<%= ActionController::Routing::Routes.recognize_path(request.url)[:id] %>
#=> '23'
# or display nicely
<%= debug Rails.application.routes.recognize_path(request.url) %>
controller_path
contient le chemin du contrôleur utilisé pour servir la vue actuelle. (ie: admin/settings
).
et
controller_name
contient le nom du contrôleur utilisé pour servir la vue actuelle. (ie: settings
).