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

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

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

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

Q&A

0回答

234閲覧

【Rails】他のユーザーが自分のプロフィールや投稿を編集できないようにしたい

mozamoza_fruit

総合スコア11

Ruby on Rails

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

0グッド

0クリップ

投稿2020/07/10 09:04

前提・実現したいこと

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

投稿が初めてなので、資料不足・失礼ありましたら
ご指摘頂けると幸いです。

宜しくお願いします。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問