2013-09-01 1 views
1

아래의 네 번째 줄은 flash이며 FlashHash 인스턴스입니다.'플래시'는 어디에 속합니까?

class LoginsController < ApplicationController 
    def destroy 
    session[:current_user_id] = nil 
    flash[:notice] = "You have successfully logged out." 
    redirect_to root_url 
    end 
end 

FlashHash 인스턴스가 어디에 속하는가? 전역 변수 인 경우 $으로 시작해야하며 Application Controller 또는 해당 수퍼 클래스의 멤버 변수 인 경우 이름은 @으로 시작해야합니다. 맞습니까? "파괴"함수에서 생성 된 로컬 변수입니까?

답변

2

당신이 레일의 소스 코드를 읽는다면, 당신은 flash를 찾을 수는 ActionDispatch::Request하는 방법이며, 그렇지 않은 있도록 ActionController::BaseRequest에서 flash 방법은, 그래서 flash이 방법에서 세션 위임합니다 Flash 모듈이 '$'또는 '@'가 필요합니다.

ActionDispatch :: 요청 ActionController에서

# File actionpack/lib/action_dispatch/middleware/flash.rb, line 6 
def flash 
    @env[Flash::KEY] ||= Flash::FlashHash.from_session_value(session["flash"]) 
end 

에서

:: 플래시

delegate :flash, to: :request 
관련 문제