如果其他选项为空,则使用替代值设置变量

时间:2016-12-09 13:57:20

标签: ruby-on-rails ruby

我有一个必须使用电话号码设置的变量,最好使用表A中的值。如果该值为空,则应该是表B中的值(与表A相关)。如果它也是空的,那么它应该是表B上另一列的值。最后,如果所有这些都是空的,则应该将其设置为字符串。

我尝试用or s:

执行此操作
telefone = a.telefone || a.associado_contato.first.telefone || a.associado_contato.first.celular || "não cadastrado" 

但结果是a.telefone(第一个选项),即使它是空白的。

我想避免嵌套if。有这种情况的简单解决方案吗?

1 个答案:

答案 0 :(得分:2)

问题是,即使是空的String也是红宝石的真相。因此"" || "1234"""

使用Rails,您可以使用presence

"".presence || "1234"    # => "1234"
"567".presence || "1234" # => "567"

所以你的代码可能变成:

telefone = a.telefone.presence || a.associado_contato.first.telefone.presence || a.associado_contato.first.celular.presence || "não cadastrado"

假设a.associado_contato已定义且至少有一个元素。