質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

416閲覧

コメント機能にてjsファイルを読み込んでくれない

Giants

総合スコア11

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2023/02/23 02:37

実現したいこと

ここに実現したいことを箇条書きで書いてください。

  • コメント投稿時に指定したjsファイルで読み込んでほしい。

前提

コメント機能にて「コメント」ボタンを押下すると、下記のエラーになってしまいます。
「comments/create.js.erb」にコードを記述していますが、なぜかRails側で「comments/create.html.erb」を呼び出そうとしております。
ブックマーク機能では非同期処理が正常にできているので、
なぜコメント機能だけjsファイルを読み込んでくれないのかが分からずにいます。
再起動等も試してみたのですが、comments/create.js.erbを正しく読み取ってくれません。

どなた様か原因が分かられる方がおられましたら、
ご教示のほどお願いできればと思います。

発生している問題・エラーメッセージ

CommentsController#create is missing a template for this request format and variant. request.formats: ["text/html"] request.variant: []

Image from Gyazo

該当のソースコード

comments_controller

1class CommentsController < ApplicationController 2 def create 3 @comment = current_user.comments.build(comment_params) 4 @comment.save 5 end 6 7 def destroy 8 @comment = current_user.comments.find(params[:id]) 9 @comment.destroy! 10 end 11 12 private 13 14 def comment_params 15 params.require(:comment).permit(:body).merge(post_id: params[:post_id]) 16 end 17end

comments/_form.html.erb

1<div class="row"> 2 <div class="col-sm-12 mb-4 text-right"> 3 <%= form_with model: comment, url: [post, comment], id: 'new_comment' do |f| %> 4 <%= f.text_area :body, class: 'form-control mb-3', id: 'js-new-comment-body', row: 4, placeholder: 'コメントを入力してください' %> 5 <%= f.submit t('defaults.comment'), class: 'btn btn-primary' %> 6 <% end %> 7 </div> 8</div> 9<hr>

comments/_comment.html.erb

1<tr id="comment-<%= comment.id %>"> 2 <td style="width: 60px"> 3 <%= image_tag 'sample.png', class: 'rounded-circle', size: '30x30' %> 4 <a><%= comment.user.name %></a> 5 </td> 6 <td> 7 <h3 class="small"></h3> 8 <div id="js-comment-<%= comment.id %>"> 9 <%= simple_format(comment.body) %> 10 </div> 11 <div id="js-textarea-comment-box-<%= comment.id %>" style="display: none;"> 12 <textarea id="js-textarea-comment-<%= comment.id %>" class="form-control mb-1"><%= comment.body %></textarea> 13 <button class="btn btn-light js-button-edit-comment-cancel" data-comment-id="<%= comment.id %>">キャンセル</button> 14 <button class="btn btn-success js-button-comment-update" data-comment-id="<%= comment.id %>">更新</button> 15 </div> 16 </td> 17 18 <% if current_user.own?(comment) %> 19 <td class="action"> 20 <ul class="list-inline justify-content-center" style="float: right;"> 21 <li class="list-inline-item"> 22 <a href="#" class='js-edit-comment-button' data-comment-id="<%= comment.id %>"> 23 <%= icon 'fa', 'pen' %> 24 </a> 25 </li> 26 <li class="list-inline-item"> 27 <%= link_to comment_path(comment), 28 class: 'js-delete-comment-button', 29 method: :delete, 30 data: { confirm: t('defaults.message.delete_confirm') }, 31 remote: true do %> 32 <%= icon 'fa', 'trash' %> 33 <% end %> 34 </li> 35 </ul> 36 </td> 37 <% end %> 38</tr>

comments/_comments.html.erb

1<div class="row"> 2 <div class="col-lg-8 offset-lg-2"> 3 <table id="js-table-comment" class="table"> 4 <%= render comments %> 5 </table> 6 </div> 7</div>

comments/create.js.erb

1$("#error_messages").remove() 2<% if @comment.errors.present? %> 3 $("#new_comment").prepend("<%= j(render('shared/error_messages', object: @comment)) %>") 4<% else %> 5 $("#js-table-comment").prepend("<%= j(render('comments/comment', comment: @comment)) %>") 6 $("#js-new-comment-body").val('') 7<% end %>

comments/destory.js.erb

1$("tr#comment-<%= @comment.id %>").remove()

routes.rb

1resources :posts do 2 resources :comments, only: %i[create destroy], shallow: true 3 collection do 4 get 'bookmarks' 5 end 6end

試したこと

再起動をすると治ったとの情報がありましたので、
VScodeの再起動、PCの再機能等を行いましたが、うまくいかずでございます。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

「comments/create.js.erb」にコードを記述していますが、なぜかRails側で「comments/create.html.erb」を呼び出そうとしております。

自分の認識では、js.erbファイルを読み込む際はその旨をコントローラに記載する必要があるかと考えられます!
今回はcreateアクションを動かしておりますので、以下の記述の中にjs.erbファイルを読み込む記述を追加してみるといかがでしょうか?

def create @comment = current_user.comments.build(comment_params) @comment.save --ここにjs.erbファイルを読み込む記述を追加-- end

respond_toかrenderで実装できるかなと思います。
(ブックマーク機能ではそういった記述無しでもいけた形ですかね?であればその時は今回みたいにフォームを使用していなかったとかかもしれないです)

投稿2023/02/27 12:50

miwa0123

総合スコア22

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問