現在ajaxでコメント機能を実装しています。
コメントをしてリロードすればコメントも反映はされますが、リロードしなければコメントがビューにもデータベースにも反映されない状態となっています。
#comments.controller.rb class CommentsController < ApplicationController def create @comment = Comment.create(comment_params) respond_to do |format| format.html { redirect_to tweet_path(params[:tweet_id]) } format.json end 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 $(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(); 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(''); $('.comments_sent').prop('disabled', false); }) }) }); #app/views/comments/create.json.jbuilder json.text @comment.text json.user_id @comment.user.id json.user_name @comment.user.name #ビューファイル .commentsusers - if current_user .formcoment = form_with(model: [@tweet, @comment], local: true,id: "new_comment") do |form| = form.text_area :text, placeholder: " コメントを追加...", rows: "2", class: "textbox" = form.submit "投稿する", class: "comments_sent"
クラス名は確認して間違いはなかったのでおそらくビューファイルなのではと思い、コントローラー部分と、jbuilderとビューファイルを確認しました。ネットでもリロードされて反映されない例はいくつかあったので参考にしてみましたが、うまくいかず。
回答1件
あなたの回答
tips
プレビュー