플래시 메시지란 무엇입니까?
플래시 메시지는 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 %>
이렇게 생겼어요 :
부트스트랩을 사용하지 않는 경우 원하는 모양으로 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
와 같은 메소드 .
이제 여러분이 코드를 작성하여 이를 실천할 차례입니다.
읽어주셔서 감사합니다!