在rails错误中获取has_many的值(无方法错误)

时间:2013-01-13 01:25:40

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1 ruby-on-rails-3.2

当我执行命令以显示用户列时有多个注释时出现此错误:

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

1 个答案:

答案 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.usernil),则不评估第二个参数,并且返回值为nil(因此,如果未定义用户,则{{1永远不会评估,所以你不会得到错误。)