我想循环遍历系统中的所有用户,并使用电子邮件地址减去@和@之后的所有内容更新用户名。 如果电子邮件是零或空字符串,然后我就分配unknown_user与当前迭代指数:TypeError:没有隐式将nil转换为带有gsub的字符串
User.all.each do |user|
puts user.email
username = (user.email.present?? user.email.gsub(/(.+)@.+/,$1) : "unknown_user#{i}")
puts username
end
它失败:
crodriguez
TypeError: no implicit conversion of nil into String
from (irb):45:in `gsub'
from (irb):45:in `block in irb_binding'
我不知道在哪里的零值。如果电子邮件不存在,那么gsub永远不会被调用。我在这里错过了什么?
请注意,这实际上并没有更新任何它只是简单地分配一个局部变量。如果你已经知道,我很抱歉。此外,它不会出现你正在验证的电子邮件地址为“crodriguez”不是一个有效的电子邮件 – engineersmnky
FYI:要在gsub替换模式中使用反向引用,只需使用''\ 1'':'gsub(/(.+) @。+ /,'\ 1')' –