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-S8PJ8paWvGM@public.gmane.org, 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-SW00rA4dTd4@public.gmane.org, test-jarhVjA4RtI@public.gmane.org, test-G6kzb5Gsg2M@public.gmane.org username for test-G6kzb5Gsg2M@public.gmane.org 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en-US.
Tom Meinlschmidt
2012-Jul-09 13:35 UTC
Re: How to set up usernames from email of all users?
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 test-S8PJ8paWvGM@public.gmane.org, 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-SW00rA4dTd4@public.gmane.org, test-jarhVjA4RtI@public.gmane.org, test-G6kzb5Gsg2M@public.gmane.org username for test-G6kzb5Gsg2M@public.gmane.org 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en-US.
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 test-S8PJ8paWvGM@public.gmane.org, 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-SW00rA4dTd4@public.gmane.org, > test-jarhVjA4RtI@public.gmane.org, test-G6kzb5Gsg2M@public.gmane.org username for test-G6kzb5Gsg2M@public.gmane.org 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > > To unsubscribe from this group, send email to > rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > > 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org 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.
Tom Meinlschmidt
2012-Jul-09 18:39 UTC
Re: How to set up usernames from email of all users?
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 test-S8PJ8paWvGM@public.gmane.org, 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-SW00rA4dTd4@public.gmane.org, test@smt.pl, test-G6kzb5Gsg2M@public.gmane.org username for test-G6kzb5Gsg2M@public.gmane.org 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > > To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > > 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > 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 ============================================================================== -- 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org 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.