【Rails5】セッションの仕組みを導入するまでで導入したセッションの仕組みをページ間で受け渡しが行えたので、記録します。

 

まず、別のページ(top.html.erb)を作成し、[アプリ名]/app/views/sessionsのフォルダに保管。

ルータにもget 'sessions/top'を追記し、ルートを作っておきます。

 

次に【Rails5】セッションの仕組みを導入するまでで作成していたsessions_controller.rbを

-----

class SessionsController < ApplicationController

  def index

    if session[:user_name]

      @notice = "#{session[:user_name]}でログインしています。"

    end

 

    if params.key?(:username) || params.key?(:password)

      user = User.find_by_username(params[:username])

      if user && user.authenticate(params[:password])

        session[:user_name] = params[:username]

      else

        session[:user_name] = nil

      end

    end

  end

end

-----

 

を次のように変更します。

-----

class SessionsController < ApplicationController

  def index

    if session[:user_name]

      @notice = "#{session[:user_name]}でログインしています。"

    end

 

    if params.key?(:username) || params.key?(:password)

      user = User.find_by_username(params[:username])

      if user && user.authenticate(params[:password])

        session[:user_name] = params[:username]

        redirect_to controller: 'sessions', action: 'top'

        #controller: 'sessions'は同じコントローラー内での遷移なら不要です。今回も不要ですが、正式な形として記載しています(このコメントも記載不要です)。

      else

        session[:user_name] = nil

      end

    end

    def top

      @notice = "#{session[:user_name]}でログインしています。"

    end

  end

end

-----

 

すると、 @noticeがtopでも利用できるようになっているため、作成していたtop.html.erb内で

<%= @notice %>

 

を記載すれば、indexから受け渡された@noticeが表示されるようになる。