Как я могу перезагрузить мои комментарии частично с ajax? - PullRequest
0 голосов
/ 16 декабря 2018

Итак, я новичок в Rails и пытаюсь перезагрузить партиал, когда создаю комментарий.Я создаю своего рода форум, где у меня есть сообщения и комментарии к сообщениям.

Вот ситуация:
/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 голосов
/ 16 декабря 2018

Какое действие вы хотите запустить, чтобы перезагрузить?вы показываете формы, ссылки, это не слишком понятно.

По сути, вам нужно использовать remote: true в форме / ссылке, затем добавить представление для этого действия с расширением .js.erb, и, на этомview, используйте javascript для изменения содержимого определенного элемента.

Что-то вроде:

1-й, вам нужно дать какой-то уникальный способ добраться до нужного элемента с помощью 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 %>

Обратите внимание на div с id=post_x и div с классом comment

Теперь вы можете найти его, используя 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) -%>';

Просто предложение, используйте «комментарии» (во множественном числе) для имени частичного, так как вы отображаете все комментарии, а не только один.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...