Czy mogę wyświetlić nazwę bieżącego kontrolera w widoku?


205

Czy istnieje sposób, aby dowiedzieć się, jaki jest aktualny kontroler z widoku?

Na przykład, dlaczego chciałbym to wiedzieć: jeśli kilka kontrolerów współdzieli ten sam układ, mogę mieć część w pliku ERB układu, w której chcę podświetlić pozycję menu bieżącej strony na podstawie kontrolera.

Może to złe podejście. Jeśli tak, jaki jest najbardziej preferowany sposób?

Chciałbym jednak wiedzieć o tym, jak uzyskać nazwę bieżącego kontrolera.

(Oczywiście, mógłbym umieścić coś takiego @controller_name = 'users'w każdym kontrolerze; ale wydaje się, że to coś, co Rails zrobiłby już za kulisami. Zastanawiam się tylko, czy istnieje jakiś wbudowany sposób.)

Odpowiedzi:


246

controller_name zawiera nazwę kontrolera używanego do obsługi bieżącego widoku.


94
W rzeczywistości jest to zła praktyka w użyciu params. controller_nameZamiast tego użyj
coorasse

1
@coorasse ma rację, na pewno informacje tam są, ale lepiej jest polegać na
nazwie nazwa_kontrolera

261

W przewodnikach po Railsach napisano:

Hash params będzie zawsze zawierać: klucze działania, ale należy użyć metody: kontroler i controller_name i ACTION_NAME zamiast dostęp do tych wartości

Parametry ActionController

Powiedzmy, że masz klasę CSS active, którą należy wstawić do dowolnego linku, którego strona jest obecnie otwarta (być może, abyś mógł stylizować inaczej). Jeśli masz static_pageskontroler z aboutdziałaniem, możesz podświetlić link w taki sposób:

<li>
  <a class='button <% if controller.controller_name == "static_pages" && controller.action_name == "about" %>active<%end%>' href="https://stackoverflow.com/about">
      About Us
  </a>
</li>

21
Jeśli masz kontroler za pomocą nazw tak: Admin::Orderswtedy controller_namei params[:controller]będzie "orders"i "admin/orders"odpowiednio.
Viktor Fonic

8
Po prostu starał się to wykorzystać i Admin::UsersControllerfaktycznie ma controller_namez usersa controller_pathz admin/usersw Rails 4.1.0.
Brandon

89
#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) %>

odniesienie


1
Aby uzyskać identyfikator, ActionController :: Routing :: Routes już nie działa. Możesz to zrobić: <% = request.path_parameters [: id]%>
rmcsharry 7.04.16

2

controller_pathprzechowuje ścieżkę kontrolera używaną do obsługi bieżącego widoku. (tj .:) admin/settings.

i

controller_namezawiera nazwę kontrolera używanego do obsługi bieżącego widoku. (tj .:) settings.


0

Jeśli chcesz używać wszystkich arkuszy stylów w swojej aplikacji, po prostu dodaj ten wiersz w application.html.erb. Wstaw go do <head> tagu

  <%= stylesheet_link_tag  controller.controller_name , media: 'all', 'data-turbolinks-track': 'reload' %>

Ponadto, aby określić tę samą klasę CSS na innym kontrolerze
Dodaj ten wiersz do pliku bodyapplication.html.erb

  <body class="<%= controller.controller_name %>-<%= controller.action_name %>">

Na przykład teraz chciałbym zmienić ptag w kontrolerze „home” i akcji „index”. index.scssDodano plik wewnętrzny .

.nameOfController-nameOfAction <tag> { }

 .home-index p {
        color:red !important;
      }
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.