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的简单性