gpt4 book ai didi

ruby-on-rails - 如何从所有用户的电子邮件中设置用户名?

转载 作者:太空宇宙 更新时间:2023-11-03 17:57:10 24 4
gpt4 key购买 nike

我想创建 rake 任务来将所有没有用户名的用户的用户名设置为他们电子邮件地址中“@”之前的部分。所以如果我的电子邮件是 test@email.eu,我的用户名应该变成 test。如果它不可用,请在其前面加上一个数字 (1)。

所以我在检查用户名的唯一性时遇到了问题。下面的代码在第二个循环后不起作用 例如:当我有三个电子邮件时:test@smt.com、test@smt.pl、test@oo.com test@oo.com 的用户名将为空。

当然,我在用户模型中对用户名进行了唯一性验证。

desc "Set username of all users wihout a username"
task set_username_of_all_users: :environment do
users_without_username = User.where(:username => ["", nil])
users_without_username.each do |user|
username = user.email.split('@').first
users = User.where(:username => username)
if users.blank?
user.username = username
user.save
else
users.each_with_index do |u, index|
pre = (index + 1).to_s
u.username = username.insert(0, pre)
u.save
end
end
end
end

其他想法在 Gist 中:https://gist.github.com/3067635#comments

最佳答案

您可以使用一个简单的 while 循环来检查用户名:

users_without_username = User.where{ :username => nil }
users_without_username.each do |user|
email_part = user.email.split('@').first
user.username = email_part
prefix = 1
while user.invalid?
# add and increment prefix until a valid name is found
user.username = prefix.to_s + email_part
prefix += 1
end
user.save
end

但是,要求用户在下次登录时输入用户名可能是更好的方法。

关于ruby-on-rails - 如何从所有用户的电子邮件中设置用户名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11395094/

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