How to set up usernames from email of all users?

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).

So i have problem witch checking uniqness of username. Code below isn`t
working after second loop ex: when i have three emails: [email protected],
[email protected], [email protected] username for [email protected] 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

If you have your validations set, you can use something like

in User model:
scope :without_username, where(:username => nil)
validates :username, :uniqueness => true, :presence => false

and then use
users = User.without_username

users.each do |user|
username = user.email.split(/@/).first
user.username = username
while !user.valid?
user.username+=rand(10).to_s
end
user.save
end

tom

On Jul 9, 2012, at 15:01 , regedarek wrote:

    username = user.email.split('@').first
end

Other ideas are in Gist: https://gist.github.com/3067635#comments


You received this message because you are subscribed to the Google G. “Ruby
on Rails: Talk” group.
To view this discussion on the web visit
https://groups.google.com/d/msg/rubyonrails-talk/-/4tkg3bBKTbcJ.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en-US.

Tomas Meinlschmidt, MS {MCT, MCP+I, MCSE, AER}, NetApp Filer/NetCache

www.meinlschmidt.com www.maxwellrender.cz www.lightgems.cz

But what if I would like to have usernames with increasing prefix this
“test”, “1test”, “2test”

W dniu poniedziaek, 9 lipca 2012 15:35:32 UTC+2 uytkownik tom
meinlschmidt napisa:

then try something like (replace while)

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

To unsubscribe from this group, send email to
[email protected].

You received this message because you are subscribed to the Google G. “Ruby
on Rails: Talk” group.
To view this discussion on the web visit
https://groups.google.com/d/msg/rubyonrails-talk/-/aKnXNZM24MMJ.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en-US.

Tomas Meinlschmidt, MS {MCT, MCP+I, MCSE, AER}, NetApp Filer/NetCache

www.meinlschmidt.com www.maxwellrender.cz www.lightgems.cz