【rails】ログイン状態にあわせて表示を切り替える
devise実装の続き
前回はdeviseの実装をしました
今回はログイン状態にあわせて画面表示を切り替えられるようにする
例)ログインしているときはユーザーアイコンを表示させて
ログインしていないときはユーザーアイコンを非表示にする
ログイン状態で表示を切り替える
ログインしていたら
今ログインしているなら、ユーザーアイコンを表示させる
app/views/layouts/application.html.hamlを開く
もしログインしていたらif user_signed_in?(表示する)というコードを書く
- if user_signed_in?
.dropdown
= image_tag 'default-avatar.png', class: 'header_avater dropbtn'
.dropdown-content
%a{:href => "#"} プロフィール
%a{:href => "#"} ログアウト
これに限らず、インデントがずれるとエラーが起きるので注意
ログアウトして表示を消す
今ログインしているなら、ログアウトもできるようにする
すでに作成済みのpathを使って、ログアウト機能を作る

destroy_user_session_path DELETE
→ userのsessionをdestroyしてログアウトする
application.html.hamlの「ログアウト」の部分を書き換える
= link_to 'ログアウト', destroy_user_session_path, data: { method: 'delete' }
link_toはデフォルトでGETリクエストなので、methodはdeleteであると表記する
2024/9/28 追記
ログアウトはdeleteメソッドからgetメソッドになっているので注意!
助けていただいた記事です↓
[
参考
[Rails]No route matches [GET] “/users/sign_out”の対処法 – Qiita
Qiita
](https://qiita.com/ken_sasaki2/items/ef0802ed0d8257753a6d#comments)
(最終課題中、ここめちゃくちゃ苦戦しました・・)
ログインしていなかったら
今ログインしていないなら、ログインできるようにする
- ログインしているか「
if user_signed_in?」で確認 - ログインしていないなら「
else」で処理を続ける
↓ ログインボタンを表示させるので、「GET」リクエストの/sign_inを使う

application.html.hamlのif文の続きを書く
- else
= link_to 'ログイン', new_user_session_path, class: 'header_loginBtn'
link_toはデフォルトでGETリクエストなので、methodは記入不要
ログインしていなければ編集ボタンも消す
ログインしていないのに、記事の詳細画面で「編集する」「削除する」のドロップボタンが表示されるのはおかしい
articles/show.html.hamlにif user_signed_in?を追加する
- if user_signed_in?
.article_detail_actions
.dropdown
= image_tag 'actions.svg', class: 'dropbtn'
.dropdown-content.mini
= link_to '編集する', edit_article_path(@article)
= link_to '削除する', article_path(@article), |
data: { method: 'delete', confirm: '本当に削除してもいいですか?' } |
ログイン状態にあわせて行動を制限する
「ログインしていないと出来ないこと」をルール付ける
例)ログインしていないと、記事投稿できないようにする
これもdeviseが用意してくれているものを使う
authenticate_user!
authenticate_user!→ 「ログインしていないと使えません」という意味
app/controllers/article_controller.rbに以下を書く
class ArticlesController < ApplicationController
before_action :authenticate_user!
すべてのアクションが、ログインしていないと使えませんというルールができる
onlyオプションで限定する
- ログインしていなくても出来ること
- ログインしていないと出来ないこと
これらを踏まえて、ログインしていないと許可できないものをonly:で追加する
before_action :authenticate_user!,
only: [:new, :create, :edit, :update, :destroy]
#DAY19