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:

> But what if I would like to have usernames with increasing prefix this 
> "test", "1test", "2test"
> 
> W dniu poniedziałek, 9 lipca 2012 15:35:32 UTC+2 użytkownik tom meinlschmidt 
> napisał:
> 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: 
> 
> > 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 
> > 
> > -- 
> > 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/-/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 
> ===============================================================================
>  
> 
> 
> -- 
> 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/-/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
===============================================================================

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
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.

Reply via email to