[ruby-on-rails] 뷰에서 현재 컨트롤러의 이름을 얻을 수 있습니까?

뷰 내에서 현재 컨트롤러가 무엇인지 알아내는 방법이 있습니까?

내가 이것을 알고 싶은 이유의 예 : 여러 컨트롤러가 동일한 레이아웃을 공유하는 경우 레이아웃 ERB 파일에 컨트롤러를 기반으로 현재 페이지의 메뉴 항목을 강조 표시하려는 부분이있을 수 있습니다.

어쩌면 그것은 나쁜 접근법입니다. 그렇다면 더 선호하는 방법은 무엇입니까?

그래도 현재 컨트롤러의 이름을 얻는 방법에 대해 알고 싶습니다.

(분명히 @controller_name = 'users'각 컨트롤러 에 무언가를 넣을 수는 있지만 Rails가 이미 배후에서 한 일처럼 보입니다. 따라서 내장 방법이 있는지 궁금합니다.)



답변

controller_name 현재보기를 제공하는 데 사용되는 컨트롤러 이름을 보유합니다.


답변

Rails Guides에서 다음과 같이 말합니다.

params 해시는 항상 : controller 및 : action 키를 포함하지만 이러한 값에 액세스하려면 controller_nameaction_name 메소드를 대신 사용해야 합니다.

ActionController 매개 변수

CSS 클래스가 있다고 가정 해 봅시다. CSS 클래스 active는 페이지가 현재 열려있는 링크에 삽입해야합니다 (아마 다른 스타일을 지정할 수 있음). 동작 이있는 static_pages컨트롤러 가있는 경우 about보기에서 다음과 같이 링크를 강조 표시 할 수 있습니다.

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


답변

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

참고


답변

controller_path현재보기를 제공하는 데 사용되는 컨트롤러의 경로를 보유합니다. (예 🙂 admin/settings.

controller_name현재보기를 제공하는 데 사용되는 컨트롤러 이름을 보유합니다. (예 🙂 settings.


답변

앱에서 모든 스타일 시트를 사용하려면 application.html.erb에이 줄을 추가하면됩니다. <head> 태그 안에 삽입

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

또한 다른 컨트롤러에서 동일한 클래스 CSS를 지정하려면 application.html.erb
에이 줄을 추가하십시오.body

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

이제 예를 들어 p‘home’컨트롤러 및 ‘index’작업에서 태그 를 변경하고 싶습니다 . 내부 index.scss파일이 추가됩니다.

.nameOfController-nameOfAction <tag> { }

 .home-index p {
        color:red !important;
      }


답변