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 [email protected], my username should become test. If it’s not
available, prepend it by a number (1).
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
users.each do |user|
username = user.email.split(/@/).first
prefix = 1
while !user.valid?
user.username=prefix.to_s+username
prefix+=1
end
user.save
end
tom
On Jul 9, 2012, at 19:50 , regedarek wrote:
users = User.without_username
tom
task set_username_of_all_users: :environment do
end