Ruby on rails 4 如何在不刷新页面的情况下发布评论。,

Ruby on rails 4 如何在不刷新页面的情况下发布评论。,,ruby-on-rails-4,Ruby On Rails 4,我希望用户能够在不刷新整个页面的情况下发布评论 目前,评论已经提交,但我面临的问题是,在用户提交评论后,页面和用户在表单中放置的任何内容都会保留在页面上,我希望它能够正确提交,并且一旦表单成功提交,用户的输入也应该清除 我的控制器操作 def create @post = Post.find(params[:post_id]) @comment = @post.comments.new(comment_params) @comment.user = current_u

我希望用户能够在不刷新整个页面的情况下发布评论

目前,评论已经提交,但我面临的问题是,在用户提交评论后,页面和用户在表单中放置的任何内容都会保留在页面上,我希望它能够正确提交,并且一旦表单成功提交,用户的输入也应该清除

我的控制器操作

def create
    @post = Post.find(params[:post_id])
    @comment = @post.comments.new(comment_params)


    @comment.user = current_user
    if @comment.save
        respond_to do |format|
            flash[:notice] = "Successfully created a comment"
            format.json { render json: @post }
        end
    else
        redirect_to :back
    end
end
我的观点

<div class="header-wrapper-blog">
  <div class="heading_for_blog">
    <div class="container">
      <%= simple_form_for([@post, @post.comments.build], remote: true, :html => {:multipart => true, id: "newcomment"  } ) do |f| %>
        <%= f.input :body, as: :text %>
        <button type="submit" class="btn btn-success" id="comment-form" name="submit"/>Submit</button>
      <% end %>
    </div>
  </div>
</div>

首先,如果您使用的是
remote:true
,那么就不需要触发另一个ajax事件,您正在这样做。 现在有两种情况,A.使用
remote:true
B.使用触发Ajax

从控制器中删除
format.json{render json:@post}
行,rails将在各自的控制器视图中呈现一个文件
create.js.erb
。在该文件中,您可以编写逻辑来清除该表单或更新特定的div。 例如,
$(#newcomment).reset()
还可以更新div,比如
$(#div.html(“blah”)

B.如果您从表单中删除
remote:true
,那么您可以使用ajax,您已经提到过,但在这种情况下添加
dataType:script
,它将呈现相同的
create.js.erb


C.如果您不想遵循上述方法,则可以调用此行
$(#newcommon).reset()
在您成功回调ajax时

首先,如果您使用的是
remote:true
,则无需触发另一个ajax事件。 现在有两种情况,A.使用
remote:true
B.使用触发Ajax

从控制器中删除
format.json{render json:@post}
行,rails将在各自的控制器视图中呈现一个文件
create.js.erb
。在该文件中,您可以编写逻辑来清除该表单或更新特定的div。 例如,
$(#newcomment).reset()
还可以更新div,比如
$(#div.html(“blah”)

B.如果您从表单中删除
remote:true
,那么您可以使用ajax,您已经提到过,但在这种情况下添加
dataType:script
,它将呈现相同的
create.js.erb

C.如果您不想遵循上述方法,则可以调用此行
$(#newcommon).reset()
在您成功回调ajax时

$(function(){
  $("#newcomment").on("submit", function(event){


  $.ajax({
      type: "POST",
      url: this.action,
      data: $(this).serialize(),
      success: function(response) {
        //update the DOM
      }
    });
    event.preventDefault();
  });
})