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

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

ただいまの
回答率

88.93%

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

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 128

前提・実現したいこと

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

該当のソースコード

module UsersHelper

  def current_user
    User.find_by(id: session[:user_id])
  end

end
class UsersController < ApplicationController
  before_action :authenticate_user!
  before_action :correct_user, only: [:edit, :update]

...

  def edit
    @book = Book.find(params[:id])
    @user = User.find(params[:id])
  end

  def update
    @user = User.find(params[:id])
    if @user.update(user_params)
      redirect_to user_path(@user.id)
      flash[:notice] = "You have updated user successfully."
    else
      render "edit"
    end
  end

  private
  ...

  def current_user
  User.find_by(id: session[:user_id])
  end

  # 正しいユーザーかどうか確認
  def correct_user
    @micropost = current_user.find_by(id: params[:id])
      unless @micropost
        redirect_to users_path
      end
  end

end


▼application.html.erb

...
  <header class="navbar-inverse">
      <div class="container">
        <nav class="nav navbar-nav navbar-left">
          <span>Bookers</span>
        </nav>
        <ul class="nav navbar-nav navbar-right" data-hover="dropdown" data-animations="zoomIn fadeIn fadeInUp fadeIn">
          <% if user_signed_in? %>
            <li class="">
              <%= link_to  user_path(current_user.id) do %>
              <span class="glyphicon glyphicon-home" aria-hidden="true">Home</span>
              <% end %>
            </li>
            <li class="">
              <%= link_to  users_path do %>
              <span class="glyphicon glyphicon-user" aria-hidden="true">Users</span>
              <% end %>
            </li>
            <li class="">
              <%= link_to  books_path do %>
              <span class="glyphicon glyphicon-book" aria-hidden="true">Books</span>
              <% end %>

            </li>
            <li class="">
              <%= link_to  destroy_user_session_path, method: :delete do %>
              <span class="glyphicon glyphicon-log-out" aria-hidden="true">Logout</span>
              <% end %>
            </li>
          <% else %>

          <li class="">
            <%= link_to  "/" do %>
            <span class="glyphicon glyphicon-home" aria-hidden="true">Home</span>
            <% end %>
          </li>
          <li class="">
            <%= link_to  about_path do %>
            <span class="glyphicon glyphicon-link" aria-hidden="true">About</span>
            <% end %>
          </li>
          <li class="">
            <%= link_to  new_user_registration_path do %>
            <span class="glyphicon glyphicon-edit" aria-hidden="true">sign up</span>
            <% end %>
          </li>
          <li class="">
            <%= link_to  new_user_session_path do %>
            <span class="glyphicon glyphicon-log-in" aria-hidden="true">login</span>
            <% end %>
          </li>

          <% end %>
        </ul>

      </div>
    </header>
...

試したこと

●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

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

宜しくお願いします。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

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

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

  • ただいまの回答率 88.93%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る