web-dev-qa-db-fra.com

Puis-je obtenir le nom du contrôleur actuel dans la vue?

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.)

198
Dan Tao

controller_name contient le nom du contrôleur utilisé pour servir la vue actuelle.

228
Anubhaw

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

Paramètres ActionController

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>
257
Musili
#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) %>

référence

87
Thaha kp

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).

2
Ricky Notaro-Garcia