Ruby
RubyOnRails

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

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

やりたいこと

ログアウトした時に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