我有一个函数generate_username
,可以生成一个用户名(显然)。
值fname
和lname
是强制性的,因此没有问题。但是,mname
不是必填字段,因此可能为空,这会破坏此代码。
有关如何请求ruby仅打印mname
值(如果存在或已设置)的任何建议,如果用户将其留空,则忽略它?
def generate_username
self.username = fname.to_s.split("")[0] + mname.to_s.split("")[0] + lname.to_s
end
答案 0 :(得分:1)
你可以试试这个(括号很重要):
def generate_username
self.username = fname.to_s.split("")[0] << (mname.to_s.split("")[0] || "") << lname.to_s
end
答案 1 :(得分:1)
抛出一个简单的三元运算符来检查值是否为blank?应该可以解决问题。
def generate_username
self.username = fname.to_s.split("")[0] + (mname.blank? ? "" : mname.to_s.split("")[0]) + lname.to_s
end
答案 2 :(得分:1)
在ruby 1.9中
def generate_username
"#{fname[0]}#{mname.to_s[0]}#{lname}"
end
或
def generate_username
fname[0]+mname.to_s[0].to_s+lname
end
在ruby 1.8中,将所有[0]
替换为[0, 1]
(此点在被Peter指出后添加)。
mname.to_s
确保您获得字符串;当mname
为nil
时,它将是一个空字符串""
。String#[0]
获取该字符串的第一个字符;当字符串为空时,它将返回nil
。#{ }
中的" "
扩展了ruby代码,并将其转换为字符串;特别是将nil
转换为空字符串""
。