假设 User 模型,有一个 id_number 记录用户的身份证号码,这个字段的值就有可能是 nil, "", 以及其他字符串,我刚开始的代码是这么写的:
if user.id_number.length == 18
birthday = user.id_number[6, 8]
elsif user.id_number.length == 15
birthday = "19" + user.id_number[6, 6]
end
代码华丽丽地异常了,原因是因为部分记录是 nil 没有 length 这个方法,于是开始动手改吧
if user.id_number.length && user.id_number.length == 18
birthday = user.id_number[6, 8]
elsif user.id_number.length && user.id_number.length == 15
birthday = "19" + user.id_number[6, 6]
end
这么写代码好像是可以工作了,不过有种便秘似的说不出的不悦……继续换个写法
if user.id_number.blank?
elsif user.id_number.length == 18
birthday = user.id_number[6, 8]
elsif user.id_number.length == 15
birthday = "19" + user.id_number[6, 6]
end
看上去少了一些,不过看着第一个空的 if,又有一种被灌翔了的感觉
if user.id_number.to_s.length == 18
birthday = user.id_number[6, 8]
elsif user.id_number.to_s.length == 15
birthday = "19" + user.id_number[6, 6]
end
这样看上去貌似靠谱一点点了有木有,不过感觉还是有很大的空间呢?
birthday = case user.id_number.to_s.length
when 18 then user.id_number[6, 8]
when 15 then "19" + user.id_number[6, 6]
else "unknown"
end
好了,最终我的代码是像上面那么些的,大家帮忙看看靠谱不靠谱呢?或者有更好更 ruby 的写法木有的?