Ruby检测是否在变量设置中设置了值

时间:2011-04-17 20:46:56

标签: ruby-on-rails ruby ruby-on-rails-3

我有一个函数generate_username,可以生成一个用户名(显然)。

fnamelname是强制性的,因此没有问题。但是,mname不是必填字段,因此可能为空,这会破坏此代码。

有关如何请求ruby仅打印mname值(如果存在或已设置)的任何建议,如果用户将其留空,则忽略它?

def generate_username
  self.username = fname.to_s.split("")[0] + mname.to_s.split("")[0] + lname.to_s
end

3 个答案:

答案 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确保您获得字符串;当mnamenil时,它将是一个空字符串""
  • String#[0]获取该字符串的第一个字符;当字符串为空时,它将返回nil
  • #{ }中的
  • " "扩展了ruby代码,并将其转换为字符串;特别是将nil转换为空字符串""