如何快捷或压缩这样的嵌套子句?
if @user.name.present?
if @user.username.present?
name = @user.name + @user.username
else
name = @user.name
end
else
name = ""
end
我想了一些连接两个字符串的方法(比如a = a + b)
答案 0 :(得分:1)
name= @user.try(:name) ? "#{@user.name}#{@user.try(:username)}" : ""
如果您想要连接,无论是否缺少任何属性,您都可以在下面尝试。
name= "#{@user.try(:name)} #{@user.try(:username)}"
try
方法返回值(如果存在)或nil值。此外,您可以使用try
深入嵌套,而无需检查其存在。
在ruby中,使用Array
来执行此操作。
[@user.name, @user.username].compact.join(" ")
这是示例
class User
def name
"john"
end
def username
"doe"
end
end
class NoUserName
def name
"john"
end
def username
""
end
end
class NilUserName
def name
"john"
end
def username
nil
end
end
class NilUser
def name
nil
end
def username
"Doe"
end
end
class NoUser
def name
""
end
def username
"Doe"
end
end
@user= User.new
puts [@user.name, @user.username].compact.join(" ").squeeze(' ').strip # "John Doe"
@user= NoUserName.new
puts [@user.name, @user.username].compact.join(" ").squeeze(' ').strip # "John"
@user= NilUserName.new
puts [@user.name, @user.username].compact.join(" ").squeeze(' ').strip # "John"
@user= NoUser.new
puts [@user.name, @user.username].compact.join(" ").squeeze(' ').strip # "Doe"
@user= NilUser.new
puts [@user.name, @user.username].compact.join(" ").squeeze(' ').strip # "Doe"