2013-04-01 1 views
3

튜토리얼 내가 따르는 튜토리얼은 오류 플래시가 요청보다 하나의 요청을 오래 지속하기 때문에 아래에 언급 된 코드가 있습니다. 왜냐하면 render은 요청으로 간주되지 않기 때문입니다. 해결책은 대신 flash.now을 사용하는 것입니다.Rails에서 요청간에 플래시 메시지가 지속될 수 있습니까?

그러나 오류 플래시로 인해 추가 요청이 한 번 지속될 수 있습니다. Rails가 무국적이라는 점을 감안할 때 다음 요청을 위해 플래시의 정보가 저장되는 방법은 무엇입니까?

class SessionsController < ApplicationController 

    def new 
    end 

    def create 
    user = User.find_by_email(params[:session][:email].downcase) 
    if user && user.authenticate(params[:session][:password]) 
     # Sign the user in and redirect to the user's show page. 
    else 
     flash[:error] = 'Invalid email/password combination' # Not quite right! 
     render 'new' 
    end 
    end 

    def destroy 
    end 
end 

답변

1

플래시는 사용자의 Session, HTTP 쿠키를 사용하여 후속 요청에 그들과 연관된에 저장됩니다. 플래시는 다음 요청시 데이터가 자동으로 플러시되는 세션의 일부입니다. 자세한 내용은 Rails Guide to Action Controller을 참조하십시오.

4

flash 대신 flash.now을 사용하십시오.

플래시 변수는 리디렉션 전에 사용하기위한 것이며 한 요청에 대해 결과 페이지에서 계속 유지됩니다. 즉, 리디렉션을하지 않고 단순히 페이지를 렌더링하는 경우 플래시 메시지는 렌더링 된 페이지에 표시되지만 리디렉션 (예 : 두 번째 요청)을 기다리는 두 가지 요청에 대해 계속 유지되므로 메시지 링크를 클릭하면 다시 나타납니다.

이상한 동작을 피하기 위해 리디렉션하는 대신 렌더링 할 때 플래시 대신 flash.now를 사용합니다.

관련 문제