뷰 내에서 현재 컨트롤러가 무엇인지 알아내는 방법이 있습니까?
내가 이것을 알고 싶은 이유의 예 : 여러 컨트롤러가 동일한 레이아웃을 공유하는 경우 레이아웃 ERB 파일에 컨트롤러를 기반으로 현재 페이지의 메뉴 항목을 강조 표시하려는 부분이있을 수 있습니다.
어쩌면 그것은 나쁜 접근법입니다. 그렇다면 더 선호하는 방법은 무엇입니까?
그래도 현재 컨트롤러의 이름을 얻는 방법에 대해 알고 싶습니다.
(분명히 @controller_name = 'users'
각 컨트롤러 에 무언가를 넣을 수는 있지만 Rails가 이미 배후에서 한 일처럼 보입니다. 따라서 내장 방법이 있는지 궁금합니다.)
답변
controller_name
현재보기를 제공하는 데 사용되는 컨트롤러 이름을 보유합니다.
답변
Rails Guides에서 다음과 같이 말합니다.
params 해시는 항상 : controller 및 : action 키를 포함하지만 이러한 값에 액세스하려면 controller_name 및 action_name 메소드를 대신 사용해야 합니다.
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;
}