Ответ 1
controller_name
содержит имя контроллера, используемого для обслуживания текущего вида.
Есть ли способ выяснить, из-за чего находится текущий контроллер?
Пример того, почему я хотел бы знать это: если несколько контроллеров используют один и тот же макет, я могу участвовать в файле ERB-макета, где я хочу выделить элемент меню текущей страницы на основе контроллера.
Может быть, это плохой подход. Если да, то каков предпочтительный способ сделать это?
Мне интересно узнать о том, как получить имя текущего контроллера в любом случае.
(Очевидно, я мог бы добавить что-то вроде @controller_name = 'users'
в каждом контроллере, но это похоже на то, что Rails уже делало бы за кулисами. Поэтому мне просто интересно, есть ли встроенный способ.)
controller_name
содержит имя контроллера, используемого для обслуживания текущего вида.
Кроме того, в Rails Guides говорится:
Хеш params всегда будет содержать ключи: controller и: action, но вы должны использовать методы имя_контроля и имя_экземпляра, чтобы получить доступ к этим значениям
Итак, скажем, у вас есть класс 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>
#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'