前提・実現したいこと
コメント投稿機能の実装を行っている最中にエラーが出てしまい進めずにいます。
初めての投稿でいたらない点があるかもしれませんが、よろしくお願いいたします。
エラー文にundefined method `title' for nil:NilClassとありtitleが定義されていないという意味かと思うのですが、どこが原因なのか解決できずにいます。
発生している問題・エラーメッセージ
Showing /Users/tattobu/projects/protospace-36479/app/views/prototypes/show.html.erb where line #5 raised: undefined method `title' for nil:NilClass Parameters: {"authenticity_token"=>"h88XvpncDzBJRVLz3OOVdM0G7UI49af7Kd7U7kHFseBxwnqUjZWZgY+PIM/qNziLxLghUTxMHVidXjRcJQQYYw==", "comment"=>{"content"=>"ai"}, "commit"=>"送信する", "prototype_id"=>"2"}
該当のソースコード
prototypes_controller.rb
ruby
1class PrototypesController < ApplicationController 2 def index 3 @prototypes = Prototype.all 4 end 5 6 def new 7 @user = User.new 8 @prototype = Prototype.new 9 end 10 11 def create 12 @prototype = Prototype.new(prototype_params) 13 if @prototype.save 14 redirect_to root_path 15 else 16 render :new 17 end 18 end 19 20 def show 21 @prototype = Prototype.find(params[:prototype_id] || params[:id]) 22 @comment = Comment.new 23 @comments = @prototype.comments.includes(:user) 24 end 25 26 def edit 27 @prototype = Prototype.find(params[:id]) 28 end 29 30 def update 31 @prototype = Prototype.find(params[:id]) 32 if @prototype.update(prototype_params) 33 redirect_to action: "show" 34 else 35 render :edit 36 end 37 end 38 39 def destroy 40 prototype = Prototype.find(params[:id]) 41 prototype.destroy 42 redirect_to action: "index" 43 end 44 45 46 private 47 48 def prototype_params 49 params.require(:prototype).permit(:title, :catch_copy, :concept, :image).merge(user_id: current_user.id) 50 end 51end
comments_controller.rb
ruby
1class CommentsController < ApplicationController 2 3 def create 4 @comment = Comment.new(comment_params) 5 if @comment.save 6 redirect_to prototype_path 7 else 8 render "prototypes/show" 9 end 10 end 11 12 private 13 def comment_params 14 params.require(:comment).permit(:content).merge(user_id: current_user.id, prototype_id: params[:prototype_id] ) 15 end 16end 17
show.html.erb
ruby
1<main class="main"> 2 <div class="inner"> 3 <div class="prototype__wrapper"> 4 <p class="prototype__hedding"> 5 <%= @prototype.title %> 6 </p> 7 <%= link_to "by #{@prototype.user.name}", root_path, class: :prototype__user %> 8 <% if user_signed_in? && current_user.id == @prototype.user_id %> 9 <div class="prototype__manage"> 10 <%= link_to "編集する", edit_prototype_path, class: :prototype__btn %> 11 <%= link_to "削除する", "/prototypes/#{@prototype.id}",method: :delete, class: :prototype__btn %> 12 </div> 13 <% end %> 14 <div class="prototype__image"> 15 <%= image_tag @prototype.image if @prototype.image.attached? %> 16 </div> 17 <div class="prototype__body"> 18 <div class="prototype__detail"> 19 <p class="detail__title">キャッチコピー</p> 20 <p class="detail__message"> 21 <%= @prototype.catch_copy %> 22 </p> 23 </div> 24 <div class="prototype__detail"> 25 <p class="detail__title">コンセプト</p> 26 <p class="detail__message"> 27 <%= @prototype.concept %> 28 </p> 29 </div> 30 </div> 31 <div class="prototype__comments"> 32 <% if user_signed_in? %> 33 <%= form_with model: [@prototype,@comment],local: true do |f|%> 34 <div class="field"> 35 <%= f.label :content, "コメント" %><br /> 36 <%= f.text_field :content, id:"comment_content" %> 37 </div> 38 <div class="actions"> 39 <%= f.submit "送信する", class: :form__btn %> 40 </div> 41 <% end %> 42 <% end %> 43 <ul class="comments_lists"> 44 <%# 投稿に紐づくコメントを一覧する処理を記述する %> 45 <li class="comments_list"> 46 <%# <%= " コメントのテキスト "%> 47 <%# <%= link_to "( ユーザー名 )", root_path, class: :comment_user %> 48 </li> 49 <%# // 投稿に紐づくコメントを一覧する処理を記述する %> 50 </ul> 51 </div> 52 </div> 53 </div> 54</main> 55
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/15 12:52