前提・実現したいこと
Instagramのようないいね機能付きのwebアプリを作成しています。
一見きちんと実装できたかのように見えたのですが、いいねした投稿自体が削除されるとエラーが起きるようになってしまいました。
発生している問題・エラーメッセージ
NoMethodError in Users#likes Showing /home/vagrant/tweet_app/app/views/users/likes.html.erb where line #42 raised: undefined method `user' for nil:NilClass Did you mean? super Extracted source (around line #42): <div class="post-left"> <%= link_to image_tag(post.user.image.to_s), "/users/#{post.user.id}"%> #42 </div> <div class="post-right"> <div class="post-user-name">
該当のソースコード
全て記載すると長くなってしまうので、関係ありそうなところだけ抜粋致しました。
もし足りない情報があれば追記します。
html
1 <% @likes.each do |like| %> 2 <% post = Post.find_by(id: like.post_id) %> 3 4 <div class="posts-index-item"> 5 <div class="post-left"> 6 <%= link_to image_tag(post.user.image.to_s), "/users/#{post.user.id}"%> 7 </div> 8 <div class="post-right"> 9 <div class="post-user-name"> 10 <%= link_to(post.user.name, "/users/#{post.user.id}") %> 11 </div> 12 </div> 13 <div class="content"> 14 <div class="index-image"> 15 <%= link_to image_tag(post.image_name.to_s), "/posts/#{post.id}" %> 16 </div> 17 <%= simple_format link_to(post.content, "/posts/#{post.id}") %> 18 </div> 19 </div> 20 <% end %>
このページでエラーが起こっています。ユーザーがいいねした投稿を一覧で表示する画面です。
html
1 <% @user.posts.each do |post| %> 2 <div class="posts-index-item"> 3 <div class="post-left"> 4 <!--<img src="<#%= "/user_images/#{post.user.image_name}" %>">--> 5 <%= link_to image_tag(@user.image.to_s), "/users/#{post.user.id}" %> 6 </div> 7 <div class="post-right"> 8 <div class="post-user-name"> 9 <%= link_to(post.user.name, "/users/#{post.user.id}") %> 10 </div> 11 </div> 12 <div class="content"> 13 <div class="index-image"> 14 <%= link_to image_tag(post.image_name.to_s), "/posts/#{post.id}" %> 15 </div> 16 <%= simple_format link_to(post.content, "/posts/#{post.id}") %> 17 </div> 18 </div> 19 <% end %>
こちらはユーザーが投稿した投稿を一覧で表示するページです。
構造はほぼ同じはずですが、エラーは起こっていません。削除した投稿は問題なく一覧からも削除されます。
users_controller
ruby
1 def show 2 @user = User.find_by(id: params[:id]) 3 @relationships_count = Relationship.where(followed_id: @user.id).count 4 end 5 6 def likes 7 @user = User.find_by(id: params[:id]) 8 @likes = Like.where(user_id: @user.id).order(created_at: :desc) 9 @relationships_count = Relationship.where(followed_id: @user.id).count 10 end 11
posts_controller
ruby
1 def new 2 @post = Post.new 3 end 4 5 def create 6 @post = Post.new( 7 content: params[:content], 8 content2: params[:content2], 9 content3: params[:content3], 10 user_id: @current_user.id, 11 prefecture:params[:prefecture], 12 category:params[:category], 13 with:params[:with], 14 image_name: "0.jpg", 15 image_name2: ".jpg", 16 image_name3: ".jpg" 17 ) 18 @post.save 19 20 @post.image_name = params[:image_name] 21 @post.image_name2 = params[:image_name2] 22 @post.image_name3 = params[:image_name3] 23 24 if @post.save 25 flash[:notice] = "旅行記を作成しました!!" 26 redirect_to("/users/#{@current_user.id}") 27 else 28 render("posts/new") 29 end 30 31 end 32 33 def destroy 34 @post = Post.find_by(id: params[:id]) 35 @post.destroy 36 flash[:notice] = "投稿を削除しました!" 37 redirect_to("/users/#{@current_user.id}") 38 end
試したこと
一度 rails db:drop してからもう一度 rails db:migrate をしてやり直しました。
投稿を削除するまでは問題なく動いたのですが、やはり投稿を削除すると同様なエラーが生じてしまいました。
エラーが出ている箇所をコメントアウトしたところ、別の行の.userで同様のエラーが生じました。
補足情報(FW/ツールのバージョンなど)
Rails 5.2
CentOS 6.8
なぜ投稿を削除したらいいねの表示でエラーが起きるのか、どうしたらエラーが解消できるのか、自分ではいくら調べたり考えたりしてもわからなかったので質問させてください。
何かわかる方、どのようなことでも構いませんのでご教授ください。
よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/07 09:38