当我执行命令以显示用户列时有多个注释时出现此错误:
<% post.comments.each do |comment| %>
<div id="comments" >
<%= comment.user.email if comment.user.email != nil %>
<%= comment.comment %>
</div>
NoMethodError in Posts#index
Showing /Users/overallduka/Blog1/app/views/posts/index.html.erb where line #50 raised:
undefined method `email' for nil:NilClass
Extracted source (around line #50):
评论模型有belongs_to用户,用户模型有has_many评论,对此,但我没有识别问题,我检查,我的所有评论都有user_id,请一些解决方案。
答案 0 :(得分:1)
问题是,comments
对象中至少有一个post
的{{1}}关联值为nil
。您正在检查user
是否为零,但您没有检查email
本身是否为零(这是触发user
的原因)。
首先,我会改变这一行:
NoMethodError
为:
<%= comment.user.email if comment.user.email != nil %>
这是ruby中的一个方便模式,首先检查<%= comment.user && comment.user.email %>
是否已定义,如果已定义,则返回第二个参数,即comment.user
。如果未定义comment.user.email
(或comment.user
或nil
),则不评估第二个参数,并且返回值为nil(因此,如果未定义用户,则{{1永远不会评估,所以你不会得到错误。)