0

当我执行命令以显示用户列时有很多评论时出现此错误:

      <% 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,请提供一些解决方案。

4

1 回答 1

1

comments问题是您的post对象上的至少一个具有关联的niluser。您正在检查它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永远不会评估,因此您不会收到错误)。

于 2013-01-13T01:50:53.487 回答