前提・実現したいこと
ruby on railsで開発中のアプリケーションで、現在ログインしている状態のとき再度ログインしようとすると、「ログイン済です」と表記したいです。
忙しい中とは思いますが分かる方ご教授頂けないでしょうか、、
上記のシステムの実装は一応出来ているのですが、その後任意のページにアクセスするとエラーが発生します。
例、ログイン後にユーザー一覧にアクセスするとエラーが発生します。他のすべてのページも同様です。
render :showところでエラーが出ています。
発生している問題・エラーメッセージ
NoMethodError in Users#index Showing /home/ec2-user/environment/sample-app/app/views/users/show.html.erb where line #7 raised: undefined method `id' for nil:NilClass NoMethodError in Users#index users#show <tr> <th class="tasks_table">ID</th> <td><%= @user.id %></td> </tr> applicationコントローラー else flash.now[:info] = "ログイン済です。" render :show end end ### 該当のソースコード users#show <h1>プロフィール</h1> <div class="col-md-8 col-md-offset-2"> <table class="table table-bordered"> <tr> <th class="tasks_table">ID</th> <td><%= @user.id %></td> </tr> <tr> <th class="tasks_table">名称</th> <td><%= @user.name %></td> </tr> <tr> <th class="tasks_table">詳細</th> <td><%= @user.email %></td> </tr> <tr> <th class="tasks_table">作成日</th> <td><%= @user.created_at.to_formatted_s(:datetime) %></td> </tr> </table> </div> usersコントローラー class UsersController < ApplicationController before_action :set_user, only: [:show, :edit, :update, :destroy] before_action :logged_in_user, only: [:index, :show, :edit, :update, :destroy] before_action :correct_user, only: [:edit, :update] before_action :admin_user, only: [:index, :destroy] before_action :admin_or_correct_user, only: [:show] def index @users = User.paginate(page: params[:page], per_page: 20) end def show end applicationコントローラー # ログイン済みのユーザーか確認します。 def logged_in_user unless logged_in? store_location flash[:danger] = "ログインしてください。" redirect_to login_url else flash.now[:info] = "ログイン済です。" render :show end end
試したこと
renderの代わりにredirect_toにしましたが、「リダイレクトが繰り返し行われました。cookieを削除してください」とエラーがでます。cookie削除も試しましたが、削除は出来てもエラーは改善されませんでした。
logged_in_userメソッドのelseから下を削除すればすべての動作は正常に作動します。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/18 08:43 編集
2019/09/18 09:16