LoginSignup
3
0

More than 5 years have passed since last update.

Railsチュートリアルでログアウトするときのuser.rbとsession_helperとsession_controllerの役割と何を書くべきか

Posted at

モデル、コントローラー、コントローラのヘルパーがそれぞれ何をしたいのか混乱したのでまとめ

やりたいこと

ログアウトした時にcookieの情報を削除するが、
その際のそれぞれのファイルの役割についてまとめ。
(Ruby on Railsチュートリアル 9.1.3 ユーザーを忘れる)

それぞれに何を書くべきか

user.rb(モデル)
DB更新系

session_helper
コントローラーに書くとゴチャゴチャするメソッドをまとめる。

session_controller
このルーティングで何をしたいのかを明確、簡潔に書く。
中身はヘルパーへgo

※間違っている可能性大なので、
ご指摘ある方是非コメントでお願い致します。

それぞれの中身

user.rbの役割

DB上のユーザの持つセッション情報をnilに更新する。

user.rb
# ユーザーのログイン情報を破棄する
  def forget
    update_attribute(:remember_digest, nil)
  end

session_helperの役割

Session_helperは
以下の2つで、session_controllerがdestroyした時にメソッドをまとめて呼べるように準備する

session_helper.rb
# 永続的セッションを破棄する
  def forget(user)
    user.forget
    cookies.delete(:user_id)
    cookies.delete(:remember_token)
  end

  def log_out
    forget(current_user)
    session.delete(:user_id)
    @current_user = nil
  end

session_controllerの役割

このルーティングにより何をしているのかを明確に示す。
ログアウトしてルートへ飛ぶということのみを記載し、他のゴチャゴチャはhelperに任せる。

session_controller.rb

  def destroy
    log_out
    redirect_to root_url
  end
3
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
3
0