У меня есть эта точка зрения, где можно оставлять комментарии и отвечать на них. Я хочу, чтобы у вас была кнопка - ответ - и нажав на нее, откроется форма ниже, чтобы добавить текст комментария и кнопку для публикации.
Это то, что у меня есть на мой взгляд:
<ul>
<div class="comment">
<strong><%= comment.user.name %></strong> - <%= comment.body %> <br>
<small>Submitted <%= time_ago_in_words(comment.created_at) %> ago
<button class="comment">Reply</button>
<% if comment.user_id == current_user.id %>
<%= link_to 'Edit', edit_comment_path(comment), class: 'btn btn-default btn-sm' %>
<% end %>
</div>
<div class="comment-form">
<%= semantic_form_for [comment, Comment.new] do |f| %>
<%= f.text_area :body, placeholder: "Add a Reply", rows: 1, required: true, class: 'form-control' %><br/>
<%= f.submit "Post", class: 'btn btn-primary btn-sm' %>
<% end %>
</div>
<%= render partial: 'comments/comment', collection: comment.comments %>
</ul>
И это application.js
$(document).ready(function() {
$('.comment-form').hide(); //Initially form wil be hidden.
$('.comment').click(function() {
$('.comment-form').show();//Form shows on button click
});
});
Сначала я попытался использовать div id, но проблема в том, что только первый комментарий скрывает форму при загрузке страницы. Поэтому я изменил использование классов (как в коде, который я опубликовал). Теперь все формы загрузки страницы закрыты. Проблема заключается в том, когда я нажимаю кнопку на комментарии, чтобы открыть соответствующую форму во всех формах во всех открытых комментариях.
Как я могу исправить?
Вы можете использовать как идентификаторы, так и класс.
Используйте класс, чтобы закрыть их изначально так, как вы, но добавьте идентификатор, например, следующий код:
<button class="comment" data-comment-id="comment_<%=comment.id%>">Reply</button>
а затем создайте форму комментария
<div class="comment-form" id="comment_<%=comment.id%>">
вы javascript-код станет:
$('.comment').click(function() {
var comment_id = "#" + $(this).attr('data-comment-id');
$(comment_id).show();
});
undefined local variable or method comment_id for #<#<Class:0x007f92953f78c8>:0x007f929530e600>
ссылкой на<div class="comment-form" id="comment_<%=comment_id%>">