【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が表示されるようになる。