前提・実現したいこと
Railsにて簡単な投稿webアプリケーションを作成し、投稿したユーザーしか編集できないようにしたい。
異なるユーザーが編集ボタンをクリックした場合、リダイレクトされるようにしたい。
発生している問題・エラーメッセージ
エラーメッセージ NoMethodError in PostsController#show undefined method `user_id' for nil:NilClass
該当のソースコード
post_controller
1class PostsController < ApplicationController 2 before_action :ensure_correct_user, {only: [:edit, :update, :destroy]} 3 4 def index 5 @posts = Post.all 6 end 7 8 def new 9 @post = Post.new 10 end 11 12 def create 13 @post = Post.new(content: params[:content], title: params[:title], user_id: @current_user.id) 14 @post.save 15 redirect_to("/posts/#{@post.id}") 16 end 17 18 def edit 19 @post = Post.find_by(id: params[:id]) 20 21 end 22 23 def update 24 @post = Post.find_by(id: params[:id]) 25 @post.title = params[:title] 26 @post.content = params[:content] 27 @post.save 28 redirect_to("/posts/#{@post.id}") 29 end 30 31 def destroy 32 @post = Post.find_by(id: params[:id]) 33 @post.destroy 34 redirect_to("/") 35 end 36 37 def show 38 @post = Post.find_by(id: params[:id]) 39 @user = User.find_by(id: @post.user_id) 40 end 41 42 def ensure_correct_user 43 @post = Post.find_by(id: params[:id]) 44 if @current_user.id != @post.user_id 45 flash[:notice] = "権限がありません" 46 redirect_to("/posts/index") 47 end 48 end 49 50 51end 52 53 54
試したこと
Postデータベースのカラムをチェックしたところ、user_idは存在しています。
投稿したユーザーは編集できているのですが、異なるユーザーの場合は、上記のようなエラーが出ます。
「編集」ボタンをクリックした場合、editメソッドに飛ぶようにしているのですがなぜかshowメソッドでエラーが出ています。
補足情報(FW/ツールのバージョンなど)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/15 05:35