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

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

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

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

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

1回答

690閲覧

Rails undefined method `id' for nil:NilClassのエラーについて

Kassy11

総合スコア26

Ruby on Rails 5

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

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2019/05/08 09:44

現在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

エラー

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

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

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

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

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

suama

2019/05/08 11:48

こんばんは。 エラー画面の下の方に、このエラーが発生した時のリクエストパラメータが表示されていますね。 (id => sign_in という表示) 新規ユーザ登録・ログインページにアクセスしているとのことですが、可能でしたら、この画面が出ている時のURLも添えていただけますでしょうか?
suama

2019/05/08 23:14

ありがとうございます! あとは、odyuさんが回答をしてくださっているとおりですね。 deviseをご利用でも、before_actionの処理が呼ばれないと、そのままでは current_userに値が入らないのでうまく動いてないのかと思います。
guest

回答1

0

ベストアンサー

やりたいことがわかりませんが

class UsersController < ApplicationController
def show
@user = User.find(params[:id])
end
end

とするのが正しい気がします。

もしくは

before_action :authenticate_user!

を追加してあげれば、良さそうです。

投稿2019/05/08 16:13

odyu

総合スコア548

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問