Ruby on Rails:尝试理解Undefined方法,nil:NilClass

时间:2013-05-09 04:30:54

标签: ruby-on-rails ruby ruby-on-rails-3 syntax-error

我正在试图理解我是如何从rails获得两个不同的输出

如果我有这个:

<%= 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。

为什么我得到两个不同的输出,我认为是相同的声明?

3 个答案:

答案 0 :(得分:3)

这种情况正在发生,因为你在nil上调用了一个方法(value.user是nil)

缩短它的简单方法......

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

注意,if value.user可能是零(不是假的),但在红宝石中仍然被认为是'假的'。

答案 1 :(得分:0)

在你的if条件下,它会检查你的用户是否存在,如果存在,它会给出正确的输出...但不知怎的,如果你的用户不在,它会检查nil并产生错误,以避免你有在那条线上写下条件或拯救零......

答案 2 :(得分:0)

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

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