1

flash以下の 4 行目は、FlashHashインスタンスであるsetsです。

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 またはそのスーパークラスのメンバー変数の場合は名前が で始まるはず@ですよね?「destroy」関数で作成されたのは単なるローカル変数ですか?

4

1 に答える 1

2

flashRails のソース コードを読むと、が のメソッドでありActionDispatch::Request、メソッドを からデリゲートActionController::Baseするモジュールがあることがわかります。これはメソッドであり、セッションからであるため、'$' や '@' は必要ありません。FlashflashRequestflash

In 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 に答える