前提・実現したいこと
ここに質問の内容を詳しく書いてください。
投稿詳細ページにコメント機能を追加し、コメントした際に非同期通信となるように実装したいです。
しかしながらコントローラーファイル及びhtml.hamlファイルなどにコードを記載しconsole.log(this)で動作を確認すると以下メッセージが検証ツールで表示されコメントの送信がされません。
※なぜかリロードすると入力したコメントの内容が表示されます。
発生している問題・エラーメッセージ
検証ツールのconsoleに以下メッセージが表示されます jquery.self-bd7ddd393353a8d2480a622e80342adf488fb6006d667e8b42e4c0073393abee.js?body=1:10255 POST http://localhost:3000/tweets/12/comments 404 (Not Found) send @ jquery.self-bd7ddd393353a8d2480a622e80342adf488fb6006d667e8b42e4c0073393abee.js?body=1:10255 ajax @ jquery.self-bd7ddd393353a8d2480a622e80342adf488fb6006d667e8b42e4c0073393abee.js?body=1:9739 (anonymous) @ comment.self-b8461feeeb1fa3dbdb29c3e8c7a150e3b17471b59d9e627745b1ade413b82a51.js?body=1:17 dispatch @ jquery.self-bd7ddd393353a8d2480a622e80342adf488fb6006d667e8b42e4c0073393abee.js?body=1:5227 elemData.handle @ jquery.self-bd7ddd393353a8d2480a622e80342adf488fb6006d667e8b42e4c0073393abee.js?body=1:4879
該当のソースコード
「show.html.haml」 .container - if current_user = form_with(model: [@tweet, @comment], local: true, id: "new_comment") do |form| = form.text_area :text, placeholder: "コメントする", rows: "2",class: "textbox" = form.submit "コメントする",class: "form__submit" - else %strong %p ※※※ コメントの投稿には新規登録/ログインが必要です ※※※ .comments %h4 <コメント一覧> - if @comments - @comments.each do |comment| %p %strong = link_to comment.user.nickname, "/users/#{comment.user_id}" : = comment.text = render "footer" 「comment.js」 $(function () { function buildHTML(comment) { var html = `<p> <strong> <a href=/users/${comment.user_id}>${comment.user_name}</a> : </strong> ${comment.text} </p>` return html; } $('#new_comment').on('submit', function (e) { e.preventDefault(); console.log(this) var formData = new FormData(this); var url = $(this).attr('action') $.ajax({ url: url, type: "POST", data: formData, dataType: 'json', processData: false, contentType: false }) .done(function (data) { var html = buildHTML(data); $('.comments').append(html); $('.textbox').val(''); $('.form__submit').prop('disabled', false); }) .fail(function () { alert('error'); }) }) }); 「create.json.jbuilder」 json.text @comment.text json.user_id @comment.user.id json.user_name @comment.user.nickname 「comments_controller.rb」 class CommentsController < ApplicationController def create @comment = Comment.create(comment_params) respond_to do |format| format.html { redirect_to tweet_path(params[:tweed_id]) } format.json end redirect_to "/tweets/#{comment.tweet.id}" end private def comment_params params.require(:comment).permit(:text).merge(user_id: current_user.id, tweet_id: params[:tweet_id]) end end
試したこと
comment.jsファイルに
.fail(function () {
alert('error');
を追記し正常にformatDataが入力されているかを確認するもコメント入力後送信ボタン押下でアラートのポップアップが表示されました。
補足情報(FW/ツールのバージョンなど)
ruby 2.5.1p57 (2018-03-29 revision 63029)
Rails 5.2.4.2
gem 'jquery-rails'設定ずみ
application.jsに、
//= require jquery
//= require rails-ujs
//= require activestorage
//= require turbolinks
//= require_tree .
となっていることも確認ずみ。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。