###前提・実現したいこと
ここに質問したいことを詳細に書いてください
progateのRoRの練習問題をコピペしてツイートアプリを自分の開発環境上で動かそうとしています。しかしながら、一つひとつ着実にコピーしているはずが、途中で次のようなエラーがでました。
###発生している問題・エラーメッセージ
undefined method `image_name' for nil:NilClass <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">
###該当のソースコード
<div class="main posts-index"> <div class="container"> <% @posts.each do |post| %> <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>
###試したこと
/public/user_images...などと書き変えてもダメでした
以前におこなったrails db:migrateがうまくいっていないのかと思ってもう一度実行しましたが、正常に実行されているようで、追加のメッセージはやはり出ませんでした。
###補足情報(言語/FW/ツール等のバージョンなど)
Rubyは2.3.1,RoRは5.0.0を使っています。
よろしくおねがいします。
追加情報になります
user.rbのコード
class User < ApplicationRecord validates :name, {presence: true} validates :email, {presence: true, uniqueness: true} validates :password, {presence: true} def posts return Post.where(user_id: self.id) end 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
posts_controller.rbのコード
class PostsController < ApplicationController before_action :authenticate_user before_action :ensure_correct_user, {only: [:edit, :update, :destroy]} def index @posts = Post.all.order(created_at: :desc) end def show @post = Post.find_by(id: params[:id]) @user = @post.user end def new @post = Post.new end def create @post = Post.new( content: params[:content], user_id: @current_user.id ) if @post.save flash[:notice] = "投稿を作成しました" redirect_to("/posts/index") else render("posts/new") end end def edit @post = Post.find_by(id: params[:id]) end def update @post = Post.find_by(id: params[:id]) @post.content = params[:content] if @post.save flash[:notice] = "投稿を編集しました" redirect_to("/posts/index") else render("posts/edit") end end def destroy @post = Post.find_by(id: params[:id]) @post.destroy flash[:notice] = "投稿を削除しました" redirect_to("/posts/index") end def ensure_correct_user @post = Post.find_by(id: params[:id]) if @post.user_id != @current_user.id flash[:notice] = "権限がありません" redirect_to("/posts/index") end end end
回答2件
あなたの回答
tips
プレビュー