0

我试图了解如何从 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。

为什么我会得到两个不同的输出,而我认为是相同的语句?

4

3 回答 3

3

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

一个简单的方法来缩短它...

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

一个音符,if value.user可以是 nil(不是假的),但在 ruby​​ 中仍然被认为是“假的”。

于 2013-05-09T04:45:30.010 回答
0

在您的 if 条件下,它会检查您的用户是否存在,如果存在,它将给出正确的输出......但是如果您的用户不存在,它会以某种方式检查 nil 并生成该错误,以避免您必须编写在那条线上的条件或救援为零...

于 2013-05-09T04:40:54.647 回答
0

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

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

于 2013-05-09T04:42:17.763 回答