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

Ruby on rails Ruby检测变量设置中是否设置了值,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,我有一个生成用户名的函数generate\u 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 您

我有一个生成用户名的函数
generate\u 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
您可以尝试以下方法(括号很重要):

def生成\u用户名
self.username=fname.to_.split(“”[0]您可以尝试以下方法(括号很重要):

def生成\u用户名

self.username=fname.to_.s.split(“”[0]抛出一个简单的三元运算符来检查值是否为,应该这样做

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

抛出一个简单的三元运算符来检查值是否为,应该可以实现这个技巧

def generate_username
  self.username = fname.to_s.split("")[0] + (mname.blank? ? "" : mname.to_s.split("")[0]) + lname.to_s
end
在ruby 1.9中

def generate_username
  "#{fname[0]}#{mname.to_s[0]}#{lname}"
end

在ruby 1.8中,将所有
[0]
替换为
[0,1]
(这一点是在Peter指出后添加的)

  • mname.to_s
    确保获得字符串;当
    mname
    nil
    时,它将是一个空字符串
  • String#[0]
    拾取该字符串的第一个字符;当字符串为空时,它将返回
    nil
  • 中的
    {}
    展开ruby代码,并将其转换为字符串;特别是将
    nil
    转换为空字符串
    • 在ruby 1.9中

      def generate_username
        "#{fname[0]}#{mname.to_s[0]}#{lname}"
      end
      

      在ruby 1.8中,将所有
      [0]
      替换为
      [0,1]
      (这一点是在Peter指出后添加的)

      • mname.to_s
        确保获得字符串;当
        mname
        nil
        时,它将是一个空字符串
      • String#[0]
        拾取该字符串的第一个字符;当字符串为空时,它将返回
        nil
      • 中的
        {}
        展开ruby代码,并将其转换为字符串;特别是将
        nil
        转换为空字符串


      为什么你要拆分然后选择第一个元素,如果你想做一些事情,为什么不做一个strip或gsub呢我对ruby是新手,所以我不确定获取字符串第一个字母的最佳技术,但我会查找这些技术,谢谢:)你是两个月的会员,问了10个问题,到目前为止没有一个问题被接受。在我回答之前,我应该注意到这一点。那么,我就不会回答了。你为什么要拆分然后取第一个元素,如果你想做什么,为什么不做一个strip或gsub呢?我对ruby是新手,所以我不确定抓取字符串第一个字母的最佳技术,但我会查这些,谢谢:)你是两个月的会员,问了10个问题,到目前为止,他们都不接受。在我回答之前,我应该注意到这一点。那么,我就不会回答了。嗯,我觉得这听起来不错,但我得到了一个找不到“+”的函数。谢谢你(忍受了我的新问题)你把括号放进去了吗?(如果错误是:NoMethodError:undefined method`+'for false:FalseClass)帮助了一点,但仍然得到
      无法将nil转换为字符串
      实际上它返回nil,没有看到这一点。忍耐一下:)我回来了。酷!如果它有效并且有帮助的话,别忘了把它作为一个可接受的答案来检查:)嗯,这对我来说似乎很合理,但是我得到了一个找不到“+”的函数。谢谢你(忍受了我的新问题)你把括号放进去了吗?(如果错误是:NoMethodError:undefined method`+'for false:FalseClass)帮助了一点,但仍然得到
      无法将nil转换为字符串
      实际上它返回nil,没有看到这一点。忍耐一下:)我回来了。酷!如果它有效并且有帮助,不要忘记检查它作为一个可接受的答案:)+1!但是在我的1.8.7Ruby中,
      fname[0]
      给了我一个Fixnum而不是第一个字符(而1.9.2给了我第一个字符;D)@PeterWong我忘了这一点。在ruby1.8.7中,可能
      [0,1]
      会起作用。喜欢
      fname[0]
      fname.split(“”[0]
      :D+1上的简单性!但是在我的1.8.7Ruby中,
      fname[0]
      给了我一个Fixnum而不是第一个字符(而1.9.2给了我第一个字符;D)@PeterWong我忘了这一点。在ruby1.8.7中,可能
      [0,1]
      会起作用。喜欢
      fname[0]
      而不是
      fname.split(“”[0]
      :D的简单性