Rails에서 렌더링이란 무엇입니까?
렌더링은 Ruby on Rails 애플리케이션의 궁극적인 목표입니다. 일반적으로 .html.erb
보기를 렌더링합니다. HMTL 및 Ruby 코드가 혼합된 파일.
보기는 사용자가 보는 것 .
Rails 앱이 수행해야 하는 모든 작업의 결과입니다. 보기는 사용자의 요청을 처리하기 위해 논리, 데이터 및 보기 템플릿을 결합합니다.
JSON 응답을 반환하는 것조차 보기로 간주될 수 있습니다.
그렇기 때문에 할 수 있는 모든 것을 배우십시오 Rails의 렌더링 시스템에 대한 중요 모든 작업이 낭비되는 것을 원하지 않는다면.
Rails에서 렌더링하면 몇 가지 놀라운 동작이 발생할 수 있습니다. 따라서 알면 알수록 좋습니다.
기본부터 시작하겠습니다!
뷰 렌더링의 기본
기본적으로 Rails에게 아무 것도 렌더링하도록 지시할 필요가 없으며 다른 모든 항목이 올바르게 설정되어 있는 한 뷰는 계속 작동합니다.
이것은 "구성에 대한 규약"의 일부입니다.
어떻게 작동하나요?
Rails는 여러분이 알지 못하는 가정을 합니다.
작업을 절약할 수 있습니다.
하지만 무슨 일이 일어나고 있는지 모른다면 마법처럼 느껴질 수 있습니다.
문제가 생길 수 있습니다!
이 특별한 경우에 Rails는 요청을 처리하는 컨트롤러 작업과 동일한 이름으로 템플릿을 렌더링하기를 원한다고 가정합니다.
따라서 BooksController#index
를 호출하면 ... Rails는 books/index.erb
를 렌더링합니다. .
지금 :
이 렌더링을 더 잘 제어할 수 있습니다.
이렇게 하면 기본 보기와 다른 보기를 렌더링할 수 있습니다.
방법은 다음과 같습니다. :
class BooksController이것은
books/listing.erb
를 렌더링합니다. (또는.haml
HAML 보기를 사용하는 경우).기호 대신 문자열을 사용할 수 있습니다.
좋아요 :
'공유/버튼' 렌더링Rails는
shared/buttons.erb
를 렌더링합니다. .당신이 알아야 할 한 가지
다른 작업과 연결된 보기를 렌더링하면 해당 작업이 실행되지 않습니다.
즉,
render :index
호출create
내부index
를 실행하지 않습니다. 방법.중요한 이유는 무엇입니까?
해당 보기에 대한 인스턴스 변수가 설정되지 않기 때문입니다!
직접 설정해야 합니다.
예 :
def index @users =User.allend# 여기에 `@users`가 없으면 오류가 발생하거나 인덱스 보기가 비어 있습니다.# 대신 `redirect_to`를 사용할 수 있습니다. 이 경우 `index`는 rundef create render :indexend사전>이보다 더 많은 렌더링 작업이 있습니다.
계속 가자!
다양한 종류의 렌더링
템플릿을 렌더링하는 것 외에도 다른 옵션이 있습니다.
할 수 있습니다 :
- HTML 문자열 렌더링
- 일반 텍스트 문자열 렌더링
- JSON 렌더링
오류를 처리할 적절한 템플릿이 없는 경우 문자열을 렌더링하면 개발 중에 일종의 오류 메시지를 표시하는 데 도움이 될 수 있습니다.
또는 특정 컨트롤러 작업에 대한 보기를 아직 작성할 준비가 되지 않은 경우
예시 :
if @user render :showelse render plain:"사용자를 찾을 수 없습니다." 종료JSON을 직접 렌더링하면 간단한 API를 빌드하는 데 사용할 수 있지만 가장 좋은 방법은 아니지만 시작하는 데 도움이 될 수 있습니다.
예 :
렌더 json:@user나는 렌더 HTML을 사용하지 않았지만 잘 사용한다면 알려주세요!
부분 렌더링 방법
렌더링은 컨트롤러를 넘어섭니다.
보기 내에서 보기를 렌더링할 수도 있습니다. .
우리는 그것을 부분적이라고 부릅니다.
왜 그렇게 하시겠습니까?
더 깔끔한 코드 및 코드 재사용.
3개의 다른 페이지에서 동일한 양식을 사용하는 경우 부분적으로 추출하는 것이 좋습니다. .
이제 변경하려는 경우 한 곳에서만 변경하면 됩니다.
예시 :
<%=렌더링:양식 %>이것이 작동하려면
_form.erb
와 같이 밑줄로 시작하는 보기 파일의 이름을 지정해야 합니다. 하지만render
를 호출하면 밑줄은 필요하지 않습니다.인스턴스 변수에 액세스할 수 있습니다. 부분에서...
하지만 지역 변수는 어떻습니까?
할 수 있습니다 :
<%=render :form, 메시지:"사과가 좋다" %>이렇게 하면
message
에 액세스할 수 있습니다. 부분의 지역 변수로.다음 :
하나의
render
로 여러 항목을 렌더링하는 방법을 배우게 됩니다. 전화!컬렉션을 렌더링하는 방법
Partial은 루프 없이 컬렉션을 렌더링하는 데 도움이 됩니다.
@books
를 렌더링한다고 가정해 보겠습니다. .할 수 있습니다 :
<%=@books %>렌더링
_book.erb
가 있는 경우 작동합니다. 부분 및 사용book
해당 템플릿 내부의 변수로.예 :
# app/views/books/_book.erb <%=image_tag(book.cover) %><%=책.제목 %>
<%=book.author %> <%=link_to "책 읽기", 책 %>현재 책 번호(CSS 클래스용)가 필요한 경우
book_counter
를 사용할 수 있습니다. .
book_
위치 모델의 이름입니다.컬렉션 렌더링은 내가 가장 좋아하는 Rails 기능 중 하나라고 생각합니다!
Rails 레이아웃 이해
새 Rails 앱을 만들면 보기 폴더 아래에 "레이아웃" 폴더가 함께 제공됩니다.
여기에서
application.html.erb
를 찾을 수 있습니다. 파일.이것이 기본 레이아웃입니다!
레이아웃이란 무엇입니까?
레이아웃을 사용하면 사이트에 일관된 모양을 부여할 수 있습니다.
그건 :
- 메뉴
- 바닥글
- CSS 및 자바스크립트 파일 로드 중...
대부분의 경우 기본 레이아웃이 좋습니다.
하지만 특정 페이지에 대해 다른 레이아웃을 원하면 어떻게 합니까?
layout
을 사용할 수 있습니다. 옵션.예 :
render :index, 레이아웃:'admin'레이아웃을 비활성화할 수 있습니다. :
렌더링:인덱스, 레이아웃:false그리고 컨트롤러 수준에서 레이아웃을 설정할 수 있습니다.
좋아요 :
class AdminsController렌더링으로 작업이 종료되지 않음
한 가지 혼란스러운 점은 컨트롤러 작업 내에서 렌더링(및 리디렉션)이 그 이후의 코드 실행을 중지한다고 생각하는 것입니다.
render
를 호출하면 이에 대해 연락할 수 있습니다. 여러 번.예 :
def create if yellow_fruit? render :bananas end render :applesend
render :apples
때문에 오류가 발생합니다. 항상 실행되며 동일한 컨트롤러 작업에서 두 번 렌더링할 수 없습니다.해결 방법은 다음과 같습니다. :
def create if yellow_fruit? render :bananas else render :apples endend또 다른 옵션은
return
을 사용하는 것입니다.render
뒤의 키워드 , 하지만 명확성을 위해 중간 메서드return
를 피하는 것이 가장 좋습니다. 가능한 한 진술하십시오.요약
Ruby on Rails에서 렌더링의 가장 중요한 주제에 대해 배웠습니다.
렌더링을 사용하면 애플리케이션 사용자에게 콘텐츠를 반환할 수 있으며 이는 컨트롤러 작업의 마지막 단계 중 하나입니다. 렌더링을 이해하면 더 나은 Rails 애플리케이션을 작성하는 데 도움이 됩니다.
이제 여러분의 차례입니다. 편집기를 열고 코딩 기술을 연습하세요.
읽어주셔서 감사합니다!