pinoko72447
@pinoko72447 (中村 いぬ)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

[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

No Answers yet.

Your answer might help someone💌