I would like to create rake task to set the username of all users’ without a username to the part before the ‘@’ in their email address. So if my email is test@email.eu, my username should become test. If it’s not available, prepend it by a number (1).
So i have problem witch checking uniqness of username. Code below isn`t working after second loop ex: when i have three emails: test@smt.com, test@smt.pl, test@oo.com username for test@oo.com will be empty.
I have of course uniqness validation for username in User model.
desc “Set username of all users wihout a username”
task set_username_of_all_users: :environment do
users_without_username = User.select{ |u| !u.username? }
users_without_username.each do |user|
username = user.email.split(‘@’).first
if User.find_by_username(username).blank?
user.username = username
user.save
else
User.find_by_username(username).each_with_index do |u, index|
u.username = username.insert(0, index)
u.save
end
end
end
end
Other ideas are in Gist: https://gist.github.com/3067635#comments