モデル、コントローラー、コントローラのヘルパーがそれぞれ何をしたいのか混乱したのでまとめ
やりたいこと
ログアウトした時に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