Rails 3 Проблема, когда форма комментария находится перед списком комментариев - PullRequest
2 голосов
/ 13 марта 2012

Я пытаюсь создать раздел комментариев на странице.Когда я помещаю форму под списком текущих комментариев, она работает нормально.Но когда я помещаю форму над списком текущих комментариев, я получаю сообщение об ошибке undefined method 'name' for nil:NilClass.Вот форма:

<% form_for([@person, @person.comments.build], :remote => true) do |f| %>

  <div class="field">
    <%= f.label :comment %><br />
    <%= f.text_area :comment, :required => :true %>
  </div><br />
  <div class="actions">
    <%= f.submit "Comment" %>
  </div>
<% end %>

И список комментариев (с отображаемой формой):

<%= render "comments/form" %>
<div id="comments">
<% @person.comments.each do |comment| %>
<h3><%= comment.user.name %> says</h3>
<p><%= comment.comment %></p>
<p><%= comment.created_at.to_date %> at <%= comment.time_string %></p>
<hr>
<% end %>

В routes.rb также размещен ресурс моих комментариев.

1 Ответ

2 голосов
/ 13 марта 2012

Это из-за @person.comments.build.Используя это, мы создадим новые comments и свяжем их с @person, переопределяя, таким образом, предыдущие comments, связанные с @person.

Итак, я цитирую "Когда я помещаю форму под списком текущих комментариев, работает нормально ".«Но когда я помещаю форму выше списка текущих комментариев, я получаю ошибку undefined method 'name' for nil:NilClass».

Если вы ставите форму на первое место, @person.comments.build выполняется перед отображением текущих комментариев, а предыдущие связанные комментарии исчезают.Поэтому, когда вы пытаетесь перебрать каждый комментарий и вызвать comment.user.name, он выдает ошибку, поскольку comment.user возвращает ноль.

Убедитесь, что ошибка произошла <h3><%= comment.user.name %> says</h3>

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