Forum: Ruby on Rails How to set up usernames from email of all users?

B39eadf04a0382f9d9ebd715669e53aa?d=identicon&s=25 Darek F. (darek_f)
on 2012-07-09 15:03
(Received via mailing list)
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
B34e6eb2a4c393a1d36fb811c82cc6f6?d=identicon&s=25 Tom Meinlschmidt (Guest)
on 2012-07-09 15:38
(Received via mailing list)
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 Groups "Ruby
on Rails: Talk" group.
> To view this discussion on the web visit
https://groups.google.com/d/msg/rubyonrails-talk/-....
> To post to this group, send email to rubyonrails-talk@googlegroups.com.
> To unsubscribe from this group, send email to
rubyonrails-talk+unsubscribe@googlegroups.com.
> 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
===============================================================================
B39eadf04a0382f9d9ebd715669e53aa?d=identicon&s=25 Darek F. (darek_f)
on 2012-07-09 19:51
(Received via mailing list)
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:
B34e6eb2a4c393a1d36fb811c82cc6f6?d=identicon&s=25 Tom Meinlschmidt (Guest)
on 2012-07-09 20:42
(Received via mailing list)
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
rubyonrails-talk+unsubscribe@googlegroups.com.
> --
> You received this message because you are subscribed to the Google Groups "Ruby
on Rails: Talk" group.
> To view this discussion on the web visit
https://groups.google.com/d/msg/rubyonrails-talk/-....
> To post to this group, send email to rubyonrails-talk@googlegroups.com.
> To unsubscribe from this group, send email to
rubyonrails-talk+unsubscribe@googlegroups.com.
> 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
===============================================================================
Please log in before posting. Registration is free and takes only a minute.
Existing account

NEW: Do you have a Google/GoogleMail, Yahoo or Facebook account? No registration required!
Log in with Google account | Log in with Yahoo account | Log in with Facebook account
No account? Register here.