1

这不是评估if陈述吗?

<%= current_user.profile.name || current_user.email if current_user.profile.name.blank? %>

调试current_user.profile.name显示它是一个空字符串,但它没有打印email。像这样更改为三元运算符:

<%= current_user.profile.name.blank? ? current_user.email : current_user.profile.name %>

有效,但我想了解为什么第一种方法不起作用。

4

4 回答 4

2

在 Ruby 中,只有nilfalse算作假。空字符串不是假的,因此它满足条件,并且||不评估 and after。

另一方面,blank?返回true一个空字符串。这就是两个例子之间的区别。

于 2013-01-18T06:54:33.027 回答
1

正如其他人已经指出的那样,空字符串在 Ruby 中是真实的,这解释了为什么需要额外的blank?. 也就是说,请注意 active_support 渴望减轻痛苦,Object#presence

<%= current_user.profile.name.presence || current_user.email %>
于 2013-01-18T09:03:30.050 回答
0

debug oncurrent_user.profile.name是一个空字符串意味着以下条件

if current_user.profile.name.blank?==

这意味着

代码

current_user.profile.name || current_user.email

不会被执行,因此结果

于 2013-01-18T06:38:51.127 回答
-2

下面的行:

<%= current_user.profile.name || current_user.email if current_user.profile.name.blank? %>

口译员检查第 1 部分:

<%=  current_user.profile.name || 

第2部分:

current_user.email if current_user.profile.name.blank? %>

然后 OR 语句陷入困境,并给出错误。第二个参数(current_user.email if current_user.profile.name.blank?)是否可用...

根据我的理解......希望你明白。

于 2013-01-18T06:58:45.980 回答