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

Rails에서 플래시 메시지를 사용하는 방법

플래시 메시지란 무엇입니까?

플래시 메시지는 Rails 애플리케이션의 사용자에게 정보를 전달하여 사용자가 작업의 결과로 어떤 일이 발생하는지 알 수 있도록 하는 방법입니다.

예시 메시지 :

  • “비밀번호가 올바르게 변경되었습니다”(확인)
  • "사용자를 찾을 수 없음"(오류)

컨트롤러에서 이러한 플래시 메시지를 설정한 다음 뷰에서 렌더링합니다. 그러면 사용자가 그에 따라 행동할 수 있습니다.

이것이 어떻게 작동하는지 정확히 알아봅시다!

플래시 메시지 사용 방법

flash를 사용하여 이러한 알림 메시지로 작업할 수 있습니다. 도우미 메서드입니다.

Ruby 해시와 매우 유사하게 작동합니다.

플래시 개체에는 keys와 같은 메서드가 있습니다. , any? 또는 each &[]를 사용하여 특정 메시지에 액세스할 수 있습니다. .

어떤 유형의 플래시 메시지를 설정할 수 있나요?

기본적으로 :

  • 공지
  • 경고

사용 방법의 예는 다음과 같습니다. :

flash.alert = "User not found."

또는 원하는 경우 :

flash[:alert] = "User not found."

(스타일의 차이일 뿐입니다.)

index와 같은 컨트롤러 작업 내에서 이 코드를 사용할 수 있습니다. , create , new

다른 방법은 이것입니다 :

redirect_to :books_path, notice: "Book not found"

이를 통해 한 번에 플래시 메시지를 리디렉션하고 생성할 수 있습니다.

좋아요!

경고 대 통지

내가 이해하는 한 alert를 사용하는 것은 별로 중요하지 않습니다. 또는 notice .

상황에 더 자연스럽게 느껴지는 것을 사용하십시오.

alert에 대해 생각하고 싶습니다. 오류 메시지 및 notice로 확인 메시지로.

분리하면 다른 스타일을 연출하는 데 도움이 됩니다.

예를 들어 :

알림을 빨간색으로 표시하고 알림을 녹색으로 표시할 수 있습니다.

add_flash_types를 사용하여 고유한 플래시 유형을 생성할 수도 있습니다. 컨트롤러 방식입니다.

좋아요 :

class ApplicationController
  add_flash_types :info, :error, :warning
end

저는 간단한 것을 좋아하기 때문에 기본 제공 유형을 고수합니다. 🙂

플래시 메시지 렌더링

플래시 메시지는 자동으로 표시되지 않습니다.

사용자가 볼 수 있도록 보기 중 하나에서 렌더링해야 합니다.

이것을 애플리케이션 레이아웃에 추가하는 것을 고려하십시오.

다음은 코드 예입니다. :

<% flash.each do |type, msg| %>
  
    <%= msg %>
  
<% end %>

알림을 표시하려는 위치(일반적으로 페이지 상단, 메뉴 표시줄 아래)에 배치합니다.

기억 :

메시지를 렌더링하면 flash에서 제거됩니다. , 따라서 다시 표시되지 않습니다.

통지 및 경고 메시지 스타일 지정

플래시 메시지에는 기본 제공되는 디자인이나 스타일이 없습니다.

해결책?

Bootstrap을 사용하는 경우 "alert alert-info"를 사용할 수 있습니다. 플래시 메시지를 보기 좋게 만드는 CSS 클래스입니다.

:

<% flash.each do |type, msg| %>
  
    <%= msg %>
  
<% end %>

이렇게 생겼어요 :

Rails에서 플래시 메시지를 사용하는 방법

부트스트랩을 사용하지 않는 경우 원하는 모양으로 CSS를 직접 작성할 수 있습니다.

플래시 메시지는 언제 렌더링되나요?

플래시 메시지는 표시한 후 다음 컨트롤러 작업에서만 제거됩니다.

의미 :

  • redirect_to , 그런 다음 flash를 렌더링합니다. 메시지, 좋습니다.
  • redirect_to &DON't Render the message, 메시지는 flash 해시
  • render하는 경우 flash를 설정하는 것과 동일한 작업에서 메시지, 해당 flash 메시지를 사용할 수 있지만 제거되지 않으므로 주변에 남아 있고 잠재적으로 두 번 표시됩니다.

그래서...

현재 작업에 대한 플래시 메시지를 설정하려는 경우 ?

바로 flash.now입니다. 온다!

예시 :

def index
  @books = Book.all

  flash.now[:notice] = "We have exactly #{@books.size} books available."
end

그러면 index가 렌더링됩니다. 보기.

notice 메시지가 표시되고 flash에서 제거됩니다. 따라서 두 번 표시되지 않습니다.

:

flash.now만 사용하면 됩니다. render하려는 경우 리디렉션하는 대신.

요약

Rails의 플래시 메시지와 올바르게 사용하는 방법을 배웠습니다!

Btw, 플래시 메시지는 유효성 검사 오류와 동일하지 않습니다. 유효성 검사는 모델 개체와 연결되며 errors와 함께 이러한 유효성 검사 메시지에 액세스합니다. @user.errors와 같은 메소드 .

이제 여러분이 코드를 작성하여 이를 실천할 차례입니다.

읽어주셔서 감사합니다!