所以我是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和教程的文章,我可以在网上找到它们,但仍然不知道该怎么做。
如果有人愿意帮助我解决这个问题,那就太好了。
答案 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) -%>';
仅是一个建议,请使用“注释”(复数形式)作为部分名称,因为您要呈现所有注释,而不仅仅是一个。