Какое действие вы хотите запустить, чтобы перезагрузить?вы показываете формы, ссылки, это не слишком понятно.
По сути, вам нужно использовать 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) -%>';
Просто предложение, используйте «комментарии» (во множественном числе) для имени частичного, так как вы отображаете все комментарии, а не только один.