前提・実現したいこと
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
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。