2009-06-19 5 views
59

나는 다음과 같은 코드로, 레일 응용 프로그램에서 플래시 통지를 사용하고이 남아 :레일 플래시 메시지는 두 페이지가로드

'새'행동에 예상대로 플래시 메시지가 렌더링
flash[:notice] = "Sorry, we weren't able to log you in with those details." 
render :action => :new 

,하지만 또한 다음 페이지에 사용자 방문 (어떤 내용이든)을 표시합니다. 한 번만 표시되어야하지만 뭔가가 붙어 있습니다.

답변

116

이 문제를 해결하는 방법에는 두 가지가 있습니다. 하나는 사용하는 것입니다 플래시가 현재 요청의 끝에서 폐기해야하며, 리디렉션 후 사용할 수 없습니다

flash.now[:notice] 

.

두번째 요청 끝에

flash.discard(:notice) 

를 호출한다. 가장 적합한 것은 응용 프로그램 동작에 따라 다릅니다.

http://api.rubyonrails.org/classes/ActionDispatch/Flash/FlashHash.html

+1

한 는, 추가 동작을 설명하기 위해, 표준 플래시 메시지는 '다음'요청을 유지하기위한 것입니다. 예 : 생성 또는 편집 요청을 처리하는 동안 플래시를 생성 한 다음 사용자를 표시 화면으로 리디렉션합니다. 브라우저가 쇼 화면에 다음 요청을하면 플래시가 표시됩니다. 쇼 화면에 실제로 플래시를 생성하는 경우 flash.now – asc99c

+0

[이 동작을 설명하는 루비 가이드 섹션] (http://guides.rubyonrails.org/action_controller_overview.html#flash-now)을 사용하십시오. – br3nt

14

좋아,이 문제를 해결했습니다. 그 주위를 돌아 다니는 방법은 다음과 같이 사용하는 것입니다 :

flash.now[:notice] = "Sorry, we weren't able to log you in with those details." 
render :action => :new 

핵심 부품은 플래시 [: 통지] 대신 flash.now [: 통지]입니다.

관련 문제