Twitterのような投稿型Webアプリを作成中のrails初学者です。次のようなエラーが発生して困っています。
投稿詳細はクリックするとユーザーの画像を表示し、誰が投稿しているか分かるようにしたいです。
試したこと:dbの不具合の例があったのでdbからuser,posts全削除
ActionView::Template::Error (undefined method `image_name' for nil:NilClass): 3: <div class="posts-show-item"> 4: 5: <div class="post-user-name"> 6: <img src="<%= "/user_images/#{@user.image_name}" %>"> 7: <%=link_to(@user.name,"/users/#{@user.id}")%> 8: </div> 9: <p> app/views/posts/show.html.erb:6
エラーが発生しているソースコードshow.html.erb
<div class="main posts-show"> <div class="container"> <div class="posts-show-item"> <div class="post-user-name"> <img src="<%= "/user_images/#{@user.image_name}" %>"> <%=link_to(@user.name,"/users/#{@user.id}")%> </div> <p> <%= link_to "<" ,"javascript:history.back()" %> <%= @post.content%> </p> <div class="post-time"> <%= @post.created_at %> </div> <div class="post-menus"> <%=link_to"編集","/posts/#{@post.id}/edit"%> <%=link_to"削除","/posts/#{@post.id}/destroy", {method:"post"}%> </div> </div> </div> </div>
rotes.rb
get 'login' => 'users#login_form' post 'login' => 'users#login' post 'logout' => 'users#logout' post 'users/:id/update' => 'users#update' # ユーザー情報編集 get 'users/:id/edit' => 'users#edit' post 'users/create' => 'users#create' # 新規投稿 get 'signup' => 'users#new' # ユーザー一覧 get 'users/index' => 'users#index' # ユーザー詳細 get 'users/:id' => 'users#show' # ルーティングの設定 get 'posts/index' => 'posts#index' get 'posts/new' => 'posts#new' get 'posts/:id' => 'posts#show' post 'posts/create' => 'posts#create' # 編集 get 'posts/:id/edit' => 'posts#edit' # 編集 post 'posts/:id/update' => 'posts#update' # 削除 post 'posts/:id/destroy' => 'posts#destroy' # get "/" => "home#top" get 'about' => 'home#about' root 'home#top' end
class PostsController < ApplicationController # 承認されたユーザーに限定 before_action :authenticate_user def index @posts = Post.all.order(created_at: :desc) end def show @post = Post.find_by(id: params[:id]) @user = User.find_by(id: @user_id) 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 # redirect_to("/posts/#{@post.id}/edit") render('posts/edit') end end # 削除 def destroy @post = Post.find_by(id: params[:id]) @post.destroy flash[:notice] = '投稿を削除しました' redirect_to('/posts/index') end # def post_params # Post.new(post_params) # end end
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/19 11:28
2019/09/19 13:03