前提・実現したいこと
twitterのようなサービスを今作ってるのですが、いいね欄に行ったら突然エラーが出ました。
アドバイスしやすいようにview、controller、modelのコードを貼ります。
いい解決策が見当たらなかったので、どうか解決よろしくお願いいたします。
発生している問題・エラーメッセージ
undefined method `user' for nil:NilClass Did you mean? super
該当のソースコード
users/likes.html.erb
<div class="main user-show"> <div class="container"> <div class="user"> <img src="<%= "/user_images/#{@user.image_name}" %>"> <h2><%= @user.name %></h2> <p><%= @user.email %></p> <% if @user.id == @current_user.id %> <%= link_to("編集", "/users/#{@user.id}/edit") %> <% end %> </div> <ul class="user-tabs"> <li><%= link_to("投稿", "/users/#{@user.id}") %></li> <li class="active"><%= link_to("いいね", "/users/#{@user.id}/likes") %></li> </ul> <% @likes.each do |like| %> <% post = Post.find_by(id: like.post_id) %> <div class="posts-index-item"> <div class="post-left"> <img src="<%= "/user_images/#{post.user.image_name}" %>"> </div> <div class="post-right"> <div class="post-user-name"> <%= link_to(post.user.name, "/users/#{post.user.id}") %> </div> <%= link_to(post.content, "/posts/#{post.id}") %> </div> </div> <% end %> </div> </div>
user.rb
class User < ApplicationRecord has_secure_password validates :name, {presence: true} validates :email, {presence: true, uniqueness: true} def posts return Post.where(user_id: self.id) end end
users_controller.rbのlikesを定義している場所
def likes @user = User.find_by(id: params[:id]) @likes = Like.where(user_id: @user.id) end
post.rb
class Post < ApplicationRecord validates :content, {presence: true, length: {maximum: 140}} validates :user_id, {presence: true} def user return User.find_by(id: self.user_id) end end
like.rb
class Like < ApplicationRecord validates :user_id, {presence: true} validates :post_id, {presence: true} end
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
windows10
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/30 02:49