はじめに
この記事はRailsチュートリアル第8章 〜基本的なログイン機構まとめ(前半)〜の後半の記事です。まだ見ていない方はそちらをご覧ください。
また今回はレイアウトに関してはまとめていません。
Ruby on Railsチュートリアル第8章
Ruby on Railsチュートリアル
ログイン
無効な値の送信をログインフォームで正しく処理ができるようになったので実際にログイン中の状態で有効な値の送信をフォームで正しく扱えるようにします。
ポイント
- ここではセッションを実装するためにモジュール機能を読み込ませる
class ApplicationController < ActionController::Base
include SessionsHelper #インクルード(読み込み)をする
end
これで前回生成されたSessionsコントローラーのモジュールをRailsの全コントローラーの親クラスに入れることができたので、
どこでも使えるようになった
log_inメソッド
session
メソッドはハッシュのように扱えるので以下のように代入する。
session[:user_id] = user.id
ポイント
この特殊な代入方法を覚えておく
##現在のユーザー
ユーザーIDを一時セッションの中に安全におけるようになったので、今度はそのユーザーIDを別のページで取り出すことにする。
そのためにcurrent_user
メソッドを定義する。
このメソッドの目的は埋め込みruby(erb)で次のようなコードを書くため。
<%= current=user.name %>
また次のようなコードでプロフに簡単にリダイレクトできるようにする。
redirect_to current_user
current_user
を次のように定義します。
def current_user
if session[:user_id]
User.find_by(id: session[:user_id])
end
end
このコードは更に簡潔にして多少重複が生まれますが結果的に以下のようなコードにします。
module SessionsHelper
# 渡されたユーザーでログインする
def log_in(user)
session[:user_id] = user.id
end
# 現在ログイン中のユーザーを返す(いる場合)
def current_user
if session[:user_id]
@current_user ||= User.find_by(id: session[:user_id])
end
end
end
さいごに
今回は重要であると思われるところに限ってまとめてみました。