Ruby 在Rails控制台中为许多用户更新电子邮件域名
我有一个用户模型,其中有一个电子邮件地址user@domain.com 我想做的是能够更新系统中的所有用户,将他们的域名从@domain.com更改为@newdomain.com 是否有某种方法可以运行命令(update_all)或类似的命令,只查找结尾部分(@domain.com),并将所有记录的结尾部分更改为@newdomain.comRuby 在Rails控制台中为许多用户更新电子邮件域名,ruby,ruby-on-rails-3,activerecord,rails-activerecord,Ruby,Ruby On Rails 3,Activerecord,Rails Activerecord,我有一个用户模型,其中有一个电子邮件地址user@domain.com 我想做的是能够更新系统中的所有用户,将他们的域名从@domain.com更改为@newdomain.com 是否有某种方法可以运行命令(update_all)或类似的命令,只查找结尾部分(@domain.com),并将所有记录的结尾部分更改为@newdomain.com 如果我必须通过控制台或Rails_Admin一个接一个地执行此操作,我会的,只是希望有一种通过编程实现的方法。您可以迭代所有用户并使用gsub更新地址,如:
如果我必须通过控制台或Rails_Admin一个接一个地执行此操作,我会的,只是希望有一种通过编程实现的方法。您可以迭代所有用户并使用
gsub
更新地址,如:
User.all.each do |user|
user.email = user.email.gsub('@domain.com', '@newdomain.com')
user.save!
end
或者,如果用户数量真的很大,您应该直接在数据库中执行,只需一个更新查询。这取决于数据库系统,在Postgres中它看起来像:
update users set email = replace(email, '@domain.com', '@newdomain.com');
commit;
只需批量迭代所有具有匹配电子邮件地址的用户,并使用新域名更新其电子邮件域:
User.where("email LIKE '%@domain.com'").find_each do |user|
user.update_attributes(
email: user.email.sub('@domain.com', '@newdomain.com')
)
end
我试着在Rails控制台上执行此操作,匹配我的模型和电子邮件字段名,当我点击enter时,控制台将不返回任何内容。是的,我包括了一个结束语:)有什么想法吗?你可以用一行来表达,但语法稍有不同:
User.all.each{User | User.email=User.email.gsub('@domain.com','@newdomain.com');User.save!}
Gotcha,这就是我的想法。我需要对控制台更友好一些。我通常把它用于简单的事情,而不是像这样的任务。我感谢你的帮助:)