質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

1410閲覧

Rails + Deviseでログインした後のメニュー切り替えがうまく動作しない

YosukeYamada

総合スコア4

Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2020/12/13 06:17

編集2020/12/13 06:22

前提・実現したいこと

Rails+Deviseでユーザー管理機能を実装し、ログイン状態によってメニューを切り替えたい。ログイン未の時は"Sign Up", "Sign In"を表示して、ログイン済みの場合は"Sing out"を表示するようにしたい。

発生している問題・エラーメッセージ

ユーザー登録までは動作したが、登録後にメニューが切り替わりません。引き続きログイン未の時に表示するべき"Sign Up", "Sign In"がメニューとして表示されていますが、どちらもクリックすると「You are already signed in.」と表示されるのでログインは完了し、sessionが作られているように見えます。Deviseのuser_signed_in?ヘルパーを使って下記のようにナビゲーションのpartialで切り替えようとしているのですが、どこが間違っているのかヒントをいただけると助かります。

該当のソースコード

_navbar.html.erb

erb

1 <div class="collapse navbar-collapse" id="navbarToggleExternalContent"> 2 <ul class="navbar-nav"> 3 <li class="nav-item"><%= link_to 'ADD NEW TWEET', tweets_search_path, class: 'nav-link' %></li> 4 <li class="nav-item"><%= link_to 'BEST TWEET', best_path, class: 'nav-link' %></li> 5 <li class="nav-item"><%= link_to 'WORST TWEET', worst_path, class: 'nav-link' %></li> 6 <li class="nav-item"><%= link_to 'ABOUT', static_pages_about_path, class: 'nav-link' %></li> 7 8 <% if user_signed_in? %> 9 <li class="nav-item"><%= link_to "sign out", destroy_user_session_path, method: :delete, class: 'nav-link' %></li> 10 11 <% else %> 12 <li class="nav-item"><%= link_to "sign up", new_user_registration_path, method: :get, class: 'nav-link' %></li> 13 <li class="nav-item"><%= link_to "sign in", new_user_session_path, method: :get, class: 'nav-link' %></li> 14 <% end %> 15 16 </ul> 17 </div>

試したこと

application controllerに下記のようにbefore_actionを入れる/コメントアウトするを試しましたが、どちらでも動作は変わりませんでした。ログインなしで基本的な機能は操作できるようにしたいので :only => []をつけています。

class ApplicationController < ActionController::Base include SessionsHelper before_action :detect_locale # before_action :authenticate_user!, :only => []

補足情報(FW/ツールのバージョンなど)

Rails 5.2.4.1
devise 4.7.3

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

https://teratail.com/questions/39356?link=qa_related_pc

上記の質問を参考に自己解決しました。
事前に別にSession Controllerを定義しており、:current_userが衝突していたようです。
該当のControllerとHelperをincludeする記述を削除することでsign outできました。

投稿2020/12/13 06:34

YosukeYamada

総合スコア4

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問