【78日目】【1日20分のRailsチュートリアル】【第8章】ログインしているユーザーのユーザー名を取得する
今日は「8.2.2 現在のユーザー」から。
8.2.2 現在のユーザー
今度はそのユーザーIDを別のページで取り出すことにしましょう。
そのためには、current_userメソッドを定義して、セッションIDに対応するユーザー名をデータベースから取り出せるようにします。
一時セッションからid取得して、そのユーザーidを元にデータベース内を検索する処理を組めば良さそう。
ユーザーIDが存在しない状態でfindを使用すると例外が発生してしまいます。
(中略)
createメソッド内でメールアドレスの検索に使ったのと同じfind_byメソッドを使うことにします。
ふむふむ。
User.find_by(id: session[:user_id])
しかし少し残念なのは、current_userがページ内で複数使用されていると、同じ回数だけデータベースも呼び出されてしまうことです。`
find_by
メソッドを使う度にデータベースアクセスが発生する、ってことですね。
データベースに保存されているデータが多いほど検索時間かかるし、無駄にアクセス増やしたくないよね。
ってことでUser.find_by
の実行結果をインスタンス変数に保存しておく方法がRailsの慣習らしい。
@current_userへの代入は、Rubyでは以下のような短縮形で書くのが王道です。
@current_user ||= User.find_by(id: session[:user_id])
へぇぇ…。Javaとかでは見たことない気がするなぁ。。。
コラム8.1読んでなんとなく分かったような。覚えないといけないね。
current_user
メソッドは最終的にこうなりました。
app/helpers/sessions_helper.rb
# 現在ログインしているユーザーを返す (ユーザーがログイン中の場合のみ) def current_user @current_user ||= User.find_by(id: session[:user_id]) end
今日の作業時間は【17分】。
次は「8.2.3 レイアウトリンクを変更する」から。