2013-09-01 48 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