0

我正在使用 Jquery 和 Ajax 创建“不刷新页面注释”。

内部帖子/show.html.erb

<%= @post.title %>
<%= @post.body %>
<%= render 'comment %>

帖子/_comment.html.erb

<%= link_to "Add Comment", new_post_comment_path(@post), id: "new_comment", remote: true %>

<div id="comments">
    <%= nested_comments @post.comments.arrange(:order => "created_at DESC") %>
</div>

评论.controller.rb

 def create
    @comment = @post.comments.new(comment_params)
    @comment.user = current_user
    @comment.save
    respond_to do |format|
      if @comment.save
        format.html { redirect_to :back }
        format.js
      else
        format.html { render action: "new" }
        format.js
      end
    end
  end

评论/_form.html.erb

<div id="comment_form">
    <%= simple_form_for [@post, @comment], remote: true do |f| %>
        <%= f.hidden_field :parent_id %>
        <%= f.text_area :body %>
        <br>
        <%= f.submit "Confirm"  %>
    <% end %>
</div>

评论/new.js.erb

$('#new_comment').hide().after('<%= j render("form") %>');

评论/create.js.erb

$('#comment_form').remove();
$('#new_comment').show();
$('#comments').append('<%= j render(@comment) %>');

一切都很好。评论已出现,无需刷新页面。

但是我得到了我不想要的一件事,每次我发表新评论时,评论都会进入评论列表的底部(我在 DESC 上创建评论)。我需要刷新页面以使所有评论正确显示。我希望每次我发布新评论时,它都会在评论列表的顶部。如何让它发生?非常感谢您..

这是 create.js 中带有 (.append) 的图像

这是 create.js 中带有 (.prepend) 的图像

4

1 回答 1

0
$('#comments').prepend('<%= j render(@comment) %>');

我认为这将解决您的问题。

.prepend()方法将指定的内容作为 jQuery 集合中每个元素的第一个子元素插入(要将其作为最后一个子元素插入,请使用.append())。

于 2018-07-17T07:26:30.377 回答