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
on 2012-07-09 15:03
on 2012-07-09 15:38
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 ===============================================================================
on 2012-07-09 19:51
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:
on 2012-07-09 20:42
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
(Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
Log in with Google account | Log in with Yahoo account
No account? Register here.