gpt4 book ai didi

ruby-on-rails - 类型错误 : no implicit conversion of nil into String with gsub

转载 作者:行者123 更新时间:2023-12-05 09:19:16 29 4
gpt4 key购买 nike

我想遍历我系统中的所有用户,并使用电子邮件地址减去 @ 和 @ 之后的所有内容来更新用户名。如果电子邮件为 nil 或空字符串,那么我只需将当前迭代索引分配给 unknown_user:

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'

我不知道 nil 值在哪里。如果电子邮件不存在,则永远不会调用 gsub。我在这里缺少什么?

最佳答案

编号的全局变量($1, $2, ...)仅在您使用 String#gsub 的 block 形式时可用所以你可以说:

user.email.gsub(/(.+)@.+/) { $1 }

当你说:

user.email.gsub(/(.+)@.+/, $1)

$1 全局是在构建 gsub 参数列表时计算的(即在 gsub 可以为其赋值之前)所以你应该期望 $1 有任何有用的值(value)。

也就是说,我可能会选择 coreyward's approach根本不用理会正则表达式。

关于ruby-on-rails - 类型错误 : no implicit conversion of nil into String with gsub,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41400956/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com