Computer >> 컴퓨터 >  >> 프로그램 작성 >> Ruby

Rails 렌더링에 대한 궁극적인 가이드

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 애플리케이션을 작성하는 데 도움이 됩니다.

이제 여러분의 차례입니다. 편집기를 열고 코딩 기술을 연습하세요.

읽어주셔서 감사합니다!