Могу ли я получить имя текущего контроллера в представлении?

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

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

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

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

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

Ответ 1

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

Ответ 2

Кроме того, в Rails Guides говорится:

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

Параметры 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>

Ответ 3

#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'

ссылка