2013-05-09 165 views
0

我想了解我是从轨道Ruby on Rails的:试图了解未定义的方法,无:NilClass

得到两个不同的输出。如果我有这样的:

<%= if value.user.present? 
    link_to value.user.email, value.user 
end %> 

我给我想要什么。它将用户的电子邮件与其关联的链接放在一起。 但是,当我把if陈述出来,

<%= link_to value.user.email, value.user %> 

我得到这个错误。

undefined method `email' for nil:NilClass 

我不明白吗?我不是在第一个陈述中做同样的事吗?它输出link_to。

为什么我得到两个不同的输出与我认为是相同的陈述?

+1

你在做循环内部吗? – 2013-05-09 04:37:05

+0

@santhosh我正在做一个循环 – hellomello 2013-05-09 05:04:49

+0

这就是原因。对于至少一个值,用户为零。 – 2013-05-09 05:26:18

回答

3

发生的事情,因为你叫上零的方法(value.user为零)

一个简单的方法,以缩短它...

<%= link_to(value.user.email, value.user) if value.user %> 

一张纸条,if value.user可能是零(不假),但在红宝石中仍然被认为是“虚假的”。

0

在你的if条件中,它检查你的用户是否存在,如果存在,它会给出正确的输出......但不知何故,如果你的用户不在场,它将检查nil并产生错误,以避免你必须在该行写入条件或救援零...

0

如果您的任何value.user项目没有关联的电子邮件,则会弹出此错误。

我在迁移时遇到过这种情况,并非所有行都分配了该项目。

相关问题