这不是评估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 %>
有效,但我想了解为什么第一种方法不起作用。
答案 0 :(得分:2)
在Ruby中,只有nil
和false
才算错。空字符串不是假的,因此它满足条件,并且不评估||
和after。
另一方面,blank?
返回true
表示空字符串。这就是两个例子之间的区别。
答案 1 :(得分:1)
正如其他人已经指出的那样,Ruby中的空字符串是真的,这就解释了为什么需要额外的blank?
。也就是说,请注意active_support渴望缓解痛苦,Object#presence
:
<%= current_user.profile.name.presence || current_user.email %>
答案 2 :(得分:0)
current_user.profile.name
上的调试是一个空字符串
表示以下条件
if current_user.profile.name.blank?
== false
这意味着
代码
current_user.profile.name || current_user.email
将不会被执行,因此结果
答案 3 :(得分:-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?)是否可用...
根据我的理解......希望你明白。