前提・実現したいこと
現在Railsでinstagramのような画像投稿アプリを作成しています。
そこで他のユーザーが自分のプロフィールや投稿を編集できないようにしたいです。
発生している問題・エラーメッセージ
NoMethodError in Homes#top Showing /home/vagrant/work/bookers2/app/views/layouts/application.html.erb where line #24 raised: undefined method `id' for nil:NilClass Extracted source (around line #24): 22 <% if user_signed_in? %> 23 <li class=""> 24 <%= link_to user_path(current_user.id) do %> 25 <span class="glyphicon glyphicon-home" aria-hidden="true">Home</span> 26 <% end %> 27 </li> Rails.root: /home/vagrant/work/bookers2
該当のソースコード
UsersHelper
1module UsersHelper 2 3 def current_user 4 User.find_by(id: session[:user_id]) 5 end 6 7end
UsersController
1class UsersController < ApplicationController 2 before_action :authenticate_user! 3 before_action :correct_user, only: [:edit, :update] 4 5... 6 7 def edit 8 @book = Book.find(params[:id]) 9 @user = User.find(params[:id]) 10 end 11 12 def update 13 @user = User.find(params[:id]) 14 if @user.update(user_params) 15 redirect_to user_path(@user.id) 16 flash[:notice] = "You have updated user successfully." 17 else 18 render "edit" 19 end 20 end 21 22 private 23 ... 24 25 def current_user 26 User.find_by(id: session[:user_id]) 27 end 28 29 # 正しいユーザーかどうか確認 30 def correct_user 31 @micropost = current_user.find_by(id: params[:id]) 32 unless @micropost 33 redirect_to users_path 34 end 35 end 36 37end 38
▼application.html.erb
html
1... 2 <header class="navbar-inverse"> 3 <div class="container"> 4 <nav class="nav navbar-nav navbar-left"> 5 <span>Bookers</span> 6 </nav> 7 <ul class="nav navbar-nav navbar-right" data-hover="dropdown" data-animations="zoomIn fadeIn fadeInUp fadeIn"> 8 <% if user_signed_in? %> 9 <li class=""> 10 <%= link_to user_path(current_user.id) do %> 11 <span class="glyphicon glyphicon-home" aria-hidden="true">Home</span> 12 <% end %> 13 </li> 14 <li class=""> 15 <%= link_to users_path do %> 16 <span class="glyphicon glyphicon-user" aria-hidden="true">Users</span> 17 <% end %> 18 </li> 19 <li class=""> 20 <%= link_to books_path do %> 21 <span class="glyphicon glyphicon-book" aria-hidden="true">Books</span> 22 <% end %> 23 24 </li> 25 <li class=""> 26 <%= link_to destroy_user_session_path, method: :delete do %> 27 <span class="glyphicon glyphicon-log-out" aria-hidden="true">Logout</span> 28 <% end %> 29 </li> 30 <% else %> 31 32 <li class=""> 33 <%= link_to "/" do %> 34 <span class="glyphicon glyphicon-home" aria-hidden="true">Home</span> 35 <% end %> 36 </li> 37 <li class=""> 38 <%= link_to about_path do %> 39 <span class="glyphicon glyphicon-link" aria-hidden="true">About</span> 40 <% end %> 41 </li> 42 <li class=""> 43 <%= link_to new_user_registration_path do %> 44 <span class="glyphicon glyphicon-edit" aria-hidden="true">sign up</span> 45 <% end %> 46 </li> 47 <li class=""> 48 <%= link_to new_user_session_path do %> 49 <span class="glyphicon glyphicon-log-in" aria-hidden="true">login</span> 50 <% end %> 51 </li> 52 53 <% end %> 54 </ul> 55 56 </div> 57 </header> 58...
試したこと
●user_helperとusers_controllerの該当記述を消すと
エラーが出ないことは確認しました。
●下記を参考にして、user_controllerにbefore_actionをを設定しましたが
undefined method `id' for nil:NilClassとなってしまいます。
▼直打ち防ぎ参考ページ
https://qiita.com/ryuuuuuuuuuu/items/73cf2708b31c4cb901ec
railチュートリアルの8章と10章を参考にしましたが、同様のエラーが出ました。
▼8章
https://railstutorial.jp/chapters/basic_login?version=5.1#sec-sessions_and_failed_login
▼10章
https://railstutorial.jp/chapters/updating_and_deleting_users?version=5.1#sec-requiring_logged_in_users
補足情報(FW/ツールのバージョンなど)
●開発環境
MacOSCatelinaバーション10.15.5
Rails 5.2.4.3
投稿が初めてなので、資料不足・失礼ありましたら
ご指摘頂けると幸いです。
宜しくお願いします。
あなたの回答
tips
プレビュー