Могу ли я получить имя текущего контроллера в представлении? - PullRequest
196 голосов
/ 21 сентября 2010

Есть ли способ выяснить, какой контроллер тока находится внутри вида?

В качестве примера того, почему я хотел бы знать это: если несколько контроллеров совместно используют один и тот же макет, у меня может быть часть в файле ERB макета, где я хочу выделить элемент меню текущей страницы на основе контроллера. *

Может быть, это плохой подход. Если да, то какой способ сделать это предпочтительнее?

Мне интересно узнать, как получить имя текущего контроллера в любом случае.

(Очевидно, я мог бы добавить что-то вроде @controller_name = 'users' в каждый контроллер; но это похоже на то, что Rails уже сделал бы за кулисами. Поэтому мне просто интересно, есть ли встроенный способ.)

Ответы [ 4 ]

253 голосов
/ 28 апреля 2013

Также в Rails Guides написано:

Хэш params всегда будет содержать ключи: controller и: action, но вы должны использовать методы controller_name и action_name вместо того, чтобы получить доступ к этим значениям

Параметры ActionController

Итак, допустим, у вас есть класс CSS active, который должен быть вставлен в любую ссылку, чья страница в данный момент открыта (возможно, чтобы вы могли по-разному стилизовать). Если у вас есть контроллер static_pages с действием about, вы можете выделить ссылку, как показано ниже:

<li>
  <a class='button <% if controller.controller_name == "static_pages" && controller.action_name == "about" %>active<%end%>' href="/about">
      About Us
  </a>
</li>
227 голосов
/ 21 сентября 2010

controller_name содержит имя контроллера, используемого для обслуживания текущего представления.

86 голосов
/ 29 мая 2013
#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) %>

ссылка

2 голосов
/ 20 июля 2018

controller_path содержит путь к контроллеру, используемому для обслуживания текущего представления.(т.е.: admin/settings).

и

controller_name содержит имя контроллера, используемого для обслуживания текущего представления.(т.е.: settings).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...