現在Ruby on RailsでWebアプリケーションを開発しています。
deviseを用いてユーザの新規登録・ログイン・ログアウト処理をつくり、自作のuser_controllerでユーザ詳細ページを作っています。
ですが、『undefined method `id' for nil:NilClass』というエラーが出ます。
current_userが存在していないことが原因なのであろうと思われますが、なぜログイン・新規登録ページにアクセスした場合にこのエラーが出るのかがわかりません。
解決策が分かる方がいらっしゃればよろしくおねがいします。
routing
1Rails.application.routes.draw do 2 get 'users/:id' => 'users#show' 3 devise_for :users 4 get 'musics/search' => 'musics#search' 5 get 'musics/index' => 'musics#index' 6 post 'musics/index' => 'musics#index' 7 get 'books/search' => 'books#search' 8 get 'books/index' => 'books#index' 9 get 'movies/search' => 'movies#index' 10 get 'movies/index' => 'movies#index' 11 root 'static_pages#home' 12 # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html 13end
class UsersController < ApplicationController def show @user = User.find_by(id: current_user.id) end end
appilication
1<!DOCTYPE html> 2<html> 3 <head> 4 <title>DIG MAD</title> 5 <%= csrf_meta_tags %> 6 <%= csp_meta_tag %> 7 8 <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %> 9 <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %> 10 </head> 11 12 <body> 13 <header class="navbar navbar-fixed-top navbar-inverse sticky-top"> 14 <div class="header-logo"> 15 <%= link_to "D I G M A D", root_path, class: "logo"%> 16 <!-- ログインしているときはロゴをクリックするとインデックスに飛ぶ --> 17 <!-- jQueryでスクロールアニメーション --> 18 </div> 19 <ul class="nav navbar-nav navbar-right"> 20 <!-- ログインしたときのヘッダー --> 21 <% if user_signed_in? %> 22 <li> 23 <%=link_to("MY PAGE","/users/#{current_user.id}")%> 24 </li> 25 <li> 26 <%=link_to("ログアウト",destroy_user_session_path, :method => :delete)%> 27 </li> 28 <% else %> 29 <li> 30 <%= link_to "DIG MADとは?",'#'%> 31 <!-- jQueryでスクロールアニメーション --> 32 </li> 33 <li> 34 <%=link_to "新規登録",new_user_registration_path%> 35 </li> 36 <li> 37 <%=link_to "ログイン",new_user_session_path%> 38 </li> 39 <%end%> 40 </ul> 41 </header> 42 <%= yield %> 43 <%= debug(params) if Rails.env.development? %> 44 </body> 45</html> 46
こんばんは。
エラー画面の下の方に、このエラーが発生した時のリクエストパラメータが表示されていますね。
(id => sign_in という表示)
新規ユーザ登録・ログインページにアクセスしているとのことですが、可能でしたら、この画面が出ている時のURLも添えていただけますでしょうか?
ありがとうございます!
あとは、odyuさんが回答をしてくださっているとおりですね。
deviseをご利用でも、before_actionの処理が呼ばれないと、そのままでは current_userに値が入らないのでうまく動いてないのかと思います。
回答1件
あなたの回答
tips
プレビュー