[rails]コメント返信機能を作りたい
解決したいこと
ruby on railsでコメント返信機能を作成中なのですが、respond_to:jsをしたときにエラーが発生するのでそれを解決したいです。コメントを送信したあとにエラーが発生します。データベースを確認したところ、保存はされていません。
こちらの記事を参考にして
https://qiita.com/j-sunaga/items/af4014a99f5704b04d95
作成中で、基本コピペをしながらつくっているので、コードの本質的な部分は恥ずかしながら理解できてないです。
どなたか心優しい方、ご教授お願いします。
発生している問題・エラー
ActionController::UnknownFormat in CommentsController#create
該当するソースコード
create.js.erb
$('#comment-post-<%= @post.id.to_s %>').
html('<%= j render "posts/comment_list", { post: @post } %>');
$('#comment-form-post-<%= @post.id.to_s %> #comment_comment').val("");
comments_controller.rb
class CommentsController < ApplicationController
before_action :authenticate_user!
def create
@comment = current_user.comments.build(comment_params)
if @comment.save
respond_to :js
flash[:alert] = "コメントしました"
else
flash[:alert] = "コメントの投稿に失敗しました"
end
@post = @comment.post
end
def destroy
@comment = Comment.find_by(id: params[:id])
@post = @comment.post
if @comment.destroy
respond_to :js
else
flash[:alert] = "コメントの削除に失敗しました"
end
end
private
def comment_params
params.required(:comment).permit(:comment, :user_id, :post_id, :parent_id)
end
end
show.html.erb
<h4>Post Detail</h4>
<label>タスク</label>
<input type="text" readonly class="form-control show-form" value="<%=@post.title%>">
<div id="comments_area">
<h2>comments</h2>
<% @comments.each do |comment| %>
<% if comment.parent_id.present? || comment.id.blank? %>
<% next %>
<% end %>
<hr>
<p> <%= comment.user.name %> : <%=comment.comment%></p>
<p> date : <%=comment.created_at.strftime("%Y-%m-%d %H:%M") %>
<div id="reply_area">
<% comment.replies.order(:created_at).each do |reply| %>
<p> <%= comment.user.name %> : <%=reply.comment%></p>
<% end %>
</div>
<%= form_with(model:[@post,@comment_reply]) do |form| %>
<div class="row">
<div class="form-group col-md-6">
<p><label>Reply</label></p>
<textarea class="form-control input-form" name="comment[content]"
rows="2"><%=@comment_reply.comment%></textarea>
</div>
</div>
<%= form.hidden_field :post_id, value: @post.id %>
<%= form.hidden_field :parent_id, value: comment.id%>
<div class="actions">
<%= form.submit %>
</div>
<% end %>
</div>
<% end %>
<%= form_with(model:[@post,@comment],local: false) do |form| %>
<p><label>New Thread</label></p>
<textarea class="form-control input-form" name="comment[comment]" rows="5"><%=@comment.comment%></textarea>
<%= form.hidden_field :post_id, value: @post.id %>
<div class="actions">
<%= form.submit %>
</div>
<% end %>
</div>
インデントが汚くて申し訳ありません。
自分で試したこと
・form_withのlocal属性をfalseにした
rails6ではform_withにlocal:falseを設定しなければならないという記事を発見
https://techracho.bpsinc.jp/hachi8833/2021_01_22/39502
・コメントモデルのcommentカラムのデフォルトの値を設定した
0