如何使用Ajax重新加载部分评论?

时间:2018-12-16 00:49:49

标签: ruby-on-rails ajax

所以我是Rails的初学者,我在创建Comment时尝试重新加载部分内容。 我正在创建一个论坛,其中有帖子和帖子评论。

这里是情况:
/views/posts/show.html.erb

<% @posts.each do |post| %>
  <%= post.title.capitalize %>
  <%= post.content %>

  <%= render 'comments/comment', post: post, comments: post.comments %>

  <%= form_tag(category_forum_post_comments_path(@category, @forum, post), :method => :post, class: 'form newtopic') do  %>
    <%= text_field_tag :content, nil, placeholder: 'Commenter', class: 'form-control' %>
    <%= submit_tag "Envoyer", class: "btn btn-primary" %>
  <% end %>
<% end %>

<%= form_tag(category_forum_posts_path(@category, @forum), :method => :post, class: 'form newtopic') do  %>
  <%= text_field_tag :title, nil, placeholder: 'Titre de votre Post', class: 'form-control' %>
  <%= text_area_tag :content, nil, placeholder: 'Description', id: 'desc', class: 'form-control' %>
  <%= submit_tag "Envoyer", class: "btn btn-primary" %>
<% end %>

,然后在/views/comments/_comment.html.erb

<% comments.each do |comment|%>
  <%= comment.content %>
  <%= link_to 'Supprimer', category_forum_post_comment_path(@category, @forum, post, comment),
    method: :delete, class: "btn-danger btn-sm", data: { confirm: 'Etes-vous sûr?' } %>
<% end %>

我想部分重新发布我的评论。
我试图了解很多关于stackoverflow和教程的文章,我可以在网上找到它们,但仍然不知道该怎么做。

如果有人愿意帮助我解决这个问题,那就太好了。

1 个答案:

答案 0 :(得分:1)

您要触发重新加载的操作是什么?您正在显示表单,链接,但不太清楚。

基本上,您需要在表单/链接上使用remote: true,然后为该操作添加一个扩展名为.js.erb的视图,并在该视图上使用javascript更改特定内容元素。

类似的东西:

首先,您需要提供一些独特的方法来使用javacsript达到所需的元素:

<% @posts.each do |post| %>
  <div id="post_<%= post.id -%>">
    <%= post.title.capitalize %>
    <%= post.content %>

    <div class='comments'>
      <%= render 'comments/comment', post: post, comments: post.comments %>
    </div>

    <%= form_tag(category_forum_post_comments_path(@category, @forum, post), :method => :post, class: 'form newtopic') do  %>
      <%= text_field_tag :content, nil, placeholder: 'Commenter', class: 'form-control' %>
      <%= submit_tag "Envoyer", class: "btn btn-primary" %>
    <% end %>
  </div>
<% end %>

<%= form_tag(category_forum_posts_path(@category, @forum), :method => :post, class: 'form newtopic') do  %>
  <%= text_field_tag :title, nil, placeholder: 'Titre de votre Post', class: 'form-control' %>
  <%= text_area_tag :content, nil, placeholder: 'Description', id: 'desc', class: 'form-control' %>
  <%= submit_tag "Envoyer", class: "btn btn-primary" %>
<% end %>

注意id=post_x的div和类comment的div

现在您可以使用javacsript找到它:

#your_view.js.erb
post = document.getElementById('post_<%= @post.id -%>');
comments = post.querySelector('comments');

最后,同样在您的视图上,呈现部分内容并替换注释的innerHTML

comments.innerHTML = '<%= j(render partial: "comments/comment", post: @post, comments: @post.comments) -%>';

仅是一个建议,请使用“注释”(复数形式)作为部分名称,因为您要呈现所有注释,而不仅仅是一个。