下面第四行设置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
实例属于哪里?如果它是一个全局变量,它应该以{{1}}开头,如果它是Application Controller或其超类的成员变量,名称应该以{{1}}开头,对吗?它只是在“destroy”函数中创建的局部变量吗?
答案 0 :(得分:2)
如果您阅读了Rails的源代码,您会发现flash
是ActionDispatch::Request
的方法,ActionController::Base
有一个Flash
模块,可以委派{{1}来自flash
的方法,因此Request
是一种方法,而且来自会话,所以它不需要'$'或'@'。
在ActionDispatch :: Request
中flash
在ActionController :: Flash
中# File actionpack/lib/action_dispatch/middleware/flash.rb, line 6
def flash
@env[Flash::KEY] ||= Flash::FlashHash.from_session_value(session["flash"])
end