0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Rails初学者】Railsでログイン後に表示内容を変えてみる(復習)

Posted at

Railsでログイン後に表示内容を変えてみる

こんにちは。
railsを学習中の者です。
転職に向けてポートフォリオ作成と並行して、CRUD操作などの復習をしています。
Railsでユーザー認証を導入したあと、 「ログインしている人にだけ特定のメニューや情報を表示したい!」と思い、実装しようと思いました。
備忘録のため、Rails初学者の自分が実際に試してうまくいった「ログイン状態による表示切り替え」の方法をまとめます。


使っている認証ツール:Devise

Deviseを使って以下の機能は導入済み:

  • ログイン/ログアウト
  • 新規登録
  • パスワードリセット

以降ではこの状態を前提に進めます。


ログイン状態の確認方法:user_signed_in?

Deviseを使っていると、以下のヘルパーメソッドが自動で使用可能。

  • user_signed_in?:ログインしているかどうか(真偽値)
  • current_user:現在ログインしているユーザー情報(Userモデルのインスタンス)

実際に試した表示切り替えの実装

例:ログインしている人だけに「マイページ」リンクを表示したい

<!-- app/views/layouts/application.html.erb や ナビゲーションの部分 -->
<nav>
  <% if user_signed_in? %>
    <%= link_to "マイページ", user_path(current_user), class: "text-blue-600" %>
    <%= link_to "ログアウト", destroy_user_session_path, method: :delete %>
  <% else %>
    <%= link_to "ログイン", new_user_session_path %>
    <%= link_to "新規登録", new_user_registration_path %>
  <% end %>
</nav>

実装のポイント

user_signed_in?を使うだけで、ログイン状態に応じた分岐が可能
current_userを使えば、ログインユーザーの情報(名前やID)も使える

応用:ログイン時だけダッシュボード風の表示を出す

<!-- app/views/pages/home.html.erb などトップページ -->
<% if user_signed_in? %>
  <h2 class="text-xl font-bold">ようこそ、<%= current_user.name %>さん!</h2>
  <p>あなた専用のメニューはこちら</p>
<% else %>
  <p>この機能を使うにはログインしてください。</p>
<% end %>

未ログインでcurrent_userを使うとエラーになることがある

ログインしていない状態でcurrent_user.nameなどを直接呼び出すとnilに対してメソッドを呼ぶことになり、NoMethodErrorが出てしまうことがある。
user_signed_in?で存在確認してから使うのが安全。

補足:controller内でログイン状態を使う

ビューだけでなく、コントローラでもログイン状態に応じた処理の分岐が可能。

# app/controllers/articles_controller.rb

def index
  if user_signed_in?
    @articles = current_user.articles
  else
    @articles = Article.all.limit(5)
  end
end
  • user_signed_in?
    Deviseが提供しているメソッドで、「ユーザーがログイン中かどうか」をtrue/falseで返す。
  • current_user
    ログインしているユーザー(Userモデルのインスタンス)を返す。未ログイン時はnil

学んだこと

  • deviseを使うとuser_signed_in?current_userが使える
  • ERB内で分岐して、ログイン状態によって表示内容を変えられる
  • ちょっとした分岐でUXが大きく変わる

こんな場面に使えるらしい

  • ログインユーザー専用の「マイ記事一覧」
  • 未ログインユーザー向けの「新着紹介」や「登録を促すUI」
  • 管理者と一般ユーザーで別の情報を表示する など

最後

今回紹介した方法は、Rails初学者の自分が実際に「やってみてうまくいった」ログイン状態による表示切り替えの一例である。
最初のうちは current_user をどう扱うのか、nil のときにどう対処するのかで悩みました。
だからこそ、こうした基本的な仕組みをしっかり理解して応用できるようになりたいと感じています。

※初学者のため、知識が浅いです。
間違えていたら、すいません。

0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?