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 或其超类的成员变量,则名称应以 开头@,对吗?它只是在“销毁”函数中创建的局部变量吗?

4

1 回答 1

2

如果你阅读 Rails 的源代码,你会发现flashis 的一个方法ActionDispatch::Request,并且ActionController::Base有一个Flash委托flash方法 from的模块Requestflash一个方法和 from session 也是如此,所以它不需要'$'或'@'。

在 ActionDispatch::Request

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

在 ActionController::Flash

delegate :flash, to: :request
于 2013-09-01T03:06:18.987 回答