我正在试图理解我是如何从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。
为什么我得到两个不同的输出,我认为是相同的声明?
答案 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项目没有关联的电子邮件,则会弹出此错误。
我在迁移时遇到过这种情况,并非所有行都分配了项目。