我想创建 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