0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Railsチュートリアル第8章 〜基本的なログイン機構まとめ(後半)〜

Posted at

はじめに

この記事はRailsチュートリアル第8章 〜基本的なログイン機構まとめ(前半)〜の後半の記事です。まだ見ていない方はそちらをご覧ください。
また今回はレイアウトに関してはまとめていません。

Ruby on Railsチュートリアル第8章
Ruby on Railsチュートリアル

ログイン

無効な値の送信をログインフォームで正しく処理ができるようになったので実際にログイン中の状態で有効な値の送信をフォームで正しく扱えるようにします。

ポイント

  • ここではセッションを実装するためにモジュール機能を読み込ませる
app/controllers/application_controller.rb
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

このコードは更に簡潔にして多少重複が生まれますが結果的に以下のようなコードにします。

app/helpers/session_helper.rb
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

さいごに

今回は重要であると思われるところに限ってまとめてみました。

参考文献

Ruby on Railsチュートリアル

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?