특정 뷰의 공유 레이아웃만 지정하는 방법
특정한 보기 레이아웃만 바꾸고 싶어요!!
제품 조합을 개발하는 과정에서 로그인 화면과 새로운 로그인 화면
제목과 사이드바를 표시하고 싶지 않습니다.
이런 장면이 나왔기 때문에 비망록으로 기사에 남기고 싶어요.
환경
나의 개발 환경은 이렇다.
MacBookPro13형
Ruby on Rails 6.0.3.4
Ruby 2.7.2
전제 조건
이 글은 Rails의 공통 레이아웃(부분)에 대한 이해를 전제로 작성되었습니다.
공동 레이아웃 방법을 모르는 사람Rails 자습서 제3장의 내용에 부합
그렇게 지도 모른다, 아마, 아마...
레이아웃 차이 예
우선 일반적인 레이아웃이 이런 느낌이다.
머리글과 사이드바를 표시합니다.
다음은 특정 레이아웃을 변경하려는 화면이 이런 느낌이다.
머리글에는 로고만 표시되고 사이드바는 표시되지 않습니다.
두 개의 공통 레이아웃 만들기
특정 페이지의 공공 레이아웃만 변경하려면 app/views/layouts 디렉터리에서
일반적으로 표시되는 공통 레이아웃
특정 페이지의 공통 레이아웃
너는 이 두 개를 준비해야 한다.
이번에 저희가 이 두 개를...
・application.html.erb
·login_layout.html.erb
내 생각엔
코드는 다음과 같습니다.
application.html.erb
<body>
<%= render 'layouts/header' %>
<%= render 'shared/flash_message' %>
<div class="wrapper">
<div class="left-wrapper">
<%= render 'layouts/sidebar' %>
</div>
<div class="right-wrapper">
<%= yield %>
</div>
</div>
<%= render 'layouts/hooter' %>
</body>
일반적으로, 지정한 것이 없으면, 보기들은 이 앱을 사용할 수 있습니다.html.erb의
ield에 포함된 곳입니다.
sign_layout.html.erb<body>
<div class="header-top">
<%= link_to((image_tag 'logo.png', class: "logo"), root_path) %>
</div>
<%= yield %>
<footer>
<p class="footer-label">Created by Sato Yusuke 2020</p>
</footer>
</body>
여기 sign_layout.html.erb의 yield는 보통 지정되지 않습니다
어떤 내용도 포함하지 않습니다. 이 공공 레이아웃은 브라우저에 표시되지 않습니다.
디스플레이 전환
그러면 특정한 보기만 전환합니다.
표시를 변경할 뷰 작업에 쓰고 가져올 공통 레이아웃을 지정합니다.
session_controller.rbclass SessionsController < ApplicationController
def new
render :layout => 'sign_layout'
end
end
이것은 기본 응용 프로그램입니다.html.erb가 아니라sign_layout.html.열다
뷰를 볼 수 있습니다.
렌더링할 때 특정 레이아웃을 표시하시겠습니까?
지금,sign_layout.html.erb를 표시할 수 있습니다.
단, 로그인에 실패했습니다. 다시 render가 로그인 화면을 읽을 때
이번에는 응용 프로그램입니다.html.erb를 통해 보이기 때문에 이렇게 말합니다
표시되었습니다.
(개발 중이기 때문에 로그인하지 않았는데 로그아웃 단추가 표시되니 신경 쓰지 마세요.)
이런 상황을 없애려면 동작에서 이렇게 묘사하십시오.
session_controller.rbclass SessionsController < ApplicationController
def new
render :layout => 'sign_layout'
end
def create
render 'new', :layout => 'sign_layout'
end
end
render를 원하는 템플릿 다음에 가져올 레이아웃을 지정합니다
대상 레이아웃을 가져올 수 있습니다.
Reference
이 문제에 관하여(특정 뷰의 공유 레이아웃만 지정하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/prog_yusuke/items/9ed7cb2ae481454aa81d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
<body>
<%= render 'layouts/header' %>
<%= render 'shared/flash_message' %>
<div class="wrapper">
<div class="left-wrapper">
<%= render 'layouts/sidebar' %>
</div>
<div class="right-wrapper">
<%= yield %>
</div>
</div>
<%= render 'layouts/hooter' %>
</body>
<body>
<div class="header-top">
<%= link_to((image_tag 'logo.png', class: "logo"), root_path) %>
</div>
<%= yield %>
<footer>
<p class="footer-label">Created by Sato Yusuke 2020</p>
</footer>
</body>
class SessionsController < ApplicationController
def new
render :layout => 'sign_layout'
end
end
class SessionsController < ApplicationController
def new
render :layout => 'sign_layout'
end
def create
render 'new', :layout => 'sign_layout'
end
end
Reference
이 문제에 관하여(특정 뷰의 공유 레이아웃만 지정하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/prog_yusuke/items/9ed7cb2ae481454aa81d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)