前提・実現したいこと
他者や自分が投稿したコンテンツ(protptype)の詳細ページでコメントする機能を実装中。
①コメント欄に入力があり、「送信する」をクリックすれば、コメントが投稿された詳細ページに遷移、
②コメント欄がブランクであれば、新規コメントがない状態の詳細ページに戻る(留まる)ようにしたい。
②はうまくいくが、①が上手く機能しない。(詳細は次の項目)
恐れ入りますがご助言いただけますと幸いです。
発生している問題・エラーメッセージ
コメント欄に文字を入力しても、投稿したコメントが反映されず、DBにも保存されない。
ブラウザ上ではエラーにはならず、投稿したコンテンツ(protptype)一覧の画面に戻る。
つまり、コメント欄がブランクの場合と同様の挙動が起こる。
DBにコメントが保存されない状況をターミナルで確認すると、
Unpermitted parameter: :comment
が出ている。
この解決方法がわからず、ご教示願いたい。
該当のソースコード
▼commentsコントローラー
ruby
1class CommentsController < ApplicationController 2 3 def create 4 @comment = Comment.new(comment_params) 5 if @comment.save 6 redirect_to "/prototypes/#{@comment.prototype.id}" 7 else 8 @prototype = @comment.prototype 9 @comments = @prototype.comments 10 render "prototypes/show" 11 end 12 end 13 14 private 15 def comment_params 16 params.require(:comment).permit(:text).merge(user_id: current_user.id, prototype_id: params[:prototype_id]) 17 end 18end
▼prototypeコントローラー
ruby
1class PrototypesController < ApplicationController 2 before_action :authenticate_user! 3 4 def index 5 @prototypes = Prototype.all 6 end 7 8 def new 9 @prototype = Prototype.new 10 end 11 12 def create 13 @prototype = Prototype.new(prototype_params) 14 if @prototype.save 15 redirect_to root_path 16 else 17 render :new 18 end 19 end 20 21 def show 22 @prototype = Prototype.find(params[:id]) 23 @comment = Comment.new 24 @comments = @prototype.comments.includes(:user) 25 end 26 27 def edit 28 @prototype = Prototype.find(params[:id]) 29 unless @prototype.user_id == current_user.id 30 redirect_to action: :index 31 end 32 end 33 34 def update 35 @prototype = Prototype.find(params[:id]) 36 if @prototype.update(prototype_params) 37 redirect_to prototype_path 38 else 39 render :edit 40 end 41 end 42 43 def destroy 44 prototype = Prototype.find(params[:id]) 45 if prototype.destroy 46 redirect_to root_path 47 end 48 end 49 50 private 51 def prototype_params 52 params.require(:prototype).permit(:title, :catch_copy, :concept, :image).merge(user_id: current_user.id) 53 end 54end
▼show.html.erb
html
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, method: :get, class: :prototype__btn %> 11 <%= link_to "削除する", prototype_path, method: :delete, class: :prototype__btn %> 12 </div> 13 <% end %> 14 <div class="prototype__image"> 15 <%= image_tag @prototype.image %> 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 :comment, "コメント" %><br /> 36 <%= f.text_field :comment %> 37 </div> 38 <div class="actions"> 39 <%= f.submit "送信する", class: :form__btn %> 40 </div> 41 <% end %> 42 <% end %> 43 <ul class="comments_lists"> 44 <% if @comments %> 45 <% @comments.each do |comment| %> 46 <li class="comments_list"> 47 <%= @comment %> 48 <%= link_to comment.text + "(#{@prototype.user.name})", "/users/#{current_user.id}", class: :comment_user %> 49 <% end %> 50 <% end %> 51 </li> 52 </ul> 53 </div> 54 </div> 55 </div> 56</main>
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/29 13:35
2020/10/29 22:57 編集
2020/11/05 05:53