Rails tutorial (第6版8章リスト8.33)をおこなっています。
プロダクト用とテスト用に、ユーザーがログインしているかどうかを判別するlogged_in?とis_logged_in?メソッドを定義したのですが、logged_in?はcurrent_userの有無で判別、is_logged_in?はsessionのuser_idの有無で判別しています。
同じ「ログインしているか」を判別するメソッドなのに、違う内容なのが何故なのか気になり、質問させていただきました。
何卒、ご回答をよろしくお願いいたします。
sessons_helper.rb 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 def logged_in? !current_user.nil? end
test_helper.rb def is_logged_in? !session[:user_id].nil? end
current_userとセッションのユーザーがどういう前提で作られたのか、その前までになにも言及されてませんでしたか?
コメントありがとうございます。
チュートリアルの文章を再度読んでみて、以下の認識をしているのですがよろしいでしょうか。
current_user
ログイン済みのユーザー(current user)だけがアクセスできるページや、扱える機能などを制御する
session[:user_id]
セッションIDに対応するユーザー情報を取得するために使用する。
ご質問の意図と異なっていたら申し訳ございません。
いえ、もし言及なければ結局どういうつもりで組まれたかは、作った人しか分からないからです。
あのチュートリアルは結構丁寧に書かれているので、何かしら言及があるはずと思ってのコメントでした。
もし、今回ご自身が理解した内容で納得できるのでしたらそれで自己解決でも良いかなと思います。
チュートリアルとはいえ他人が書いた他人のコードなので、意図を確認しようとしているのでしたら、コード作った人(もしくはチュートリアル関係者)しか回答できないと思ってます。
ご回答ありがとうございます。
そうなのですね。てっきり、log_inのような一般的な機能は、全ての開発者の中で共通の定義をして使用しているものと思っていました。
以降、メソッドの定義についてはより注意してみてみようと思います。
回答1件
あなたの回答
tips
プレビュー