2013-09-01 80 views
1

下面的第四行設置爲flash,這是一個FlashHash實例。'flash'屬於哪裏?

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

FlashHash實例屬於哪裏?如果它是一個全局變量,它應該以$開頭,如果它是應用程序控制器或其超類的成員變量,則名稱應該以@開頭,對嗎?它只是一個局部變量,它是在「destroy」函數中創建的嗎?

回答

2

如果你讀了Rails的源代碼,你會發現flashActionDispatch::Request的方法,以及ActionController::BaseFlash模塊代表從Requestflash方法,所以flash是一種方法和會話,所以也沒有需要'$'或'@'。

在ActionDispatch ::請求

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

::閃存

delegate :flash, to: :request