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