获取rails error中的has_many的值(没有方法错误)



当我执行命令显示用户的列时,有许多注释此错误:

      <% 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,因此您不会得到错误)。

相关内容

  • 没有找到相关文章

最新更新