当我执行命令显示用户的列时,有许多注释此错误:
<% 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 user和用户模型有has_many评论,就像这样,但我没有发现问题,我检查和我所有的评论都有user_id,请提供一些解决方案。
问题是post
对象上至少有一个comments
具有user
关联的nil
值。您正在检查email
不是nil,但您没有检查user
本身是否为nil(这是触发NoMethodError
的原因)。
作为开始,我将修改这一行:
<%= comment.user.email if comment.user.email != nil %>
:
<%= comment.user && comment.user.email %>
这是ruby中一个方便的模式,它首先检查comment.user
是否定义,如果定义了,则返回第二个参数,即comment.user.email
。如果没有定义comment.user
(或nil
,或false
),则不计算第二个参数,返回值为nil(因此,如果没有定义用户,则永远不会计算comment.user.email
,因此您不会得到错误)。