Ruby on rails 如果其他选项为空,则使用可选值设置变量

Ruby on rails 如果其他选项为空,则使用可选值设置变量,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有一个变量,必须设置一个电话号码,最好是表a中的一个值。如果是空的,它应该是表B中的一个值(与表a相关)。如果它也是空的,那么它应该是表B上另一列的值。最后,如果所有这些都是空的,那么它应该设置为字符串 我试着用或s执行此操作: telefone = a.telefone || a.associado_contato.first.telefone || a.associado_contato.first.celular || "não cadastrado" 但是结果是a.telefone

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

我试着用
s执行此操作:

telefone = a.telefone || a.associado_contato.first.telefone || a.associado_contato.first.celular || "não cadastrado" 
但是结果是
a.telefone
(第一个选项),即使它是空的


我想避免嵌套的
if
s。有没有一个简单的解决方案?

问题是,对于ruby来说,即使是空字符串也是真实的。所以
“||”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\u contato
,并且至少有一个元素。

您可以使用
#presence
。如果对象为
空白,则返回
nil
,否则返回对象。因此,您将能够像现在一样使用
|
链接它们。