Rails 3当评论表单位于评论列表之前时发出

时间:2012-03-13 02:50:43

标签: ruby-on-rails-3

我正在尝试在页面上创建评论部分。当我把表格放在当前评论列表下面时,它可以正常工作。但是,当我将表单放在当前注释列表上方时,我收到错误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 个答案:

答案 0 :(得分:2)

那是因为@person.comments.build。使用此功能将构建新的comments并将其与@person相关联,从而覆盖与comments关联的先前@person

所以,我引用你的话说“当我把表格放在当前评论列表下面时,它可以正常工作”。 “但是,当我将表单放在当前注释列表上方时,我收到错误undefined method 'name' for nil:NilClass”。

如果您首先放置表单,则会在显示当前注释之前执行@person.comments.build,之前的相关注释已消失。因此,当您尝试循环每个评论并调用comment.user.name时,它会出错,因为comment.user返回nil。

请验证错误是否由<h3><%= comment.user.name %> says</h3>

决定