Блок, выполненный на члене коллекции, переданной в партию, выполняется дважды, ruby ​​на рельсах - PullRequest
0 голосов
/ 30 мая 2018

Частичный код отображается с помощью:

<%= render: @feed_items %>

Где @feed_items содержит микросообщения, что дает ему переменную micropost для каждого члена коллекции в частичном.

_micropost.html.erb

<li>
  <div>
    <%= form_for([micropost, micropost.comments.build], remote: true, :html => {:class => 'comment_form'}) do |f| %>     
      <%= f.text_area :content %>
      <%= f.submit "post comment" %>
    <% end %>  
  </div>
  <div class="comments_container<%= micropost.id %>">
    <% if micropost.comments.present? %>
      <% micropost.comments.each do |comment| %>
        <div class="comment">
        <%= comment.content %>
        <%= link_to "Comments posts", micropost_comment_path(micropost, comment), method: :get %>
      <% end %>
    <% end %>   
  </div>
</li>

Проблема заключается в том, что при вставке формы <% micropost.comments.each do |comment| %> выполняется дважды.Когда я удаляю форму, мой код работает отлично.Я могу проверить, используя <%= comment.inspect %> внутри блока, то, что выплевано, это

<div>
#<Comment id: 1, content: "hello", micropost_id: 1809, gallery_id: nil, picture_id: nil, created_at: "2018-05-29 06:53:21", updated_at: "2018-05-29 06:53:21">
</div>
<div>
#<Comment id: nil, content: nil, micropost_id: 1809, gallery_id: nil, picture_id: nil, created_at: nil, updated_at: nil> 
</div>

Я вижу, что есть значение для второго объекта micropost_id: 1809, но все остальное - ноль.

РЕДАКТИРОВАТЬ

Мой вопрос заключается в том, что у меня есть только один комментарий для этого микросообщения в базе данных, который является первым комментарием в проверяемом объекте, второй просто создается случайным образом, и яне уверен почему?

Спасибо.

1 Ответ

0 голосов
/ 30 мая 2018

Попробуйте внести изменения.

<%= form_for([micropost, Comment.new], remote: true, :html => {:class => 'comment_form'}) do |f| %>  

micropost.comments.build - генерировать новые комментарии, принадлежащие микросообщению.

Таким образом, будет отображен еще один комментарий.

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