我有一个用户模型,其中有一个电子邮件地址为user@domain.com
我想要做的是能够更新系统中的所有用户,将他们的域名从@ domain.com更改为@ newdomain.com
我是否可以通过某种方式运行命令(update_all)或类似于查找结束部分(@ domain.com)的命令,并将所有记录更改为@ newdomain.com?
如果我必须通过控制台或Rails_Admin一个接一个地执行此操作,我希望有一种方法可以以编程方式执行此操作。
答案 0 :(得分:4)
只需批量处理具有匹配电子邮件地址的所有用户,并使用新域名更新其电子邮件的域名:
User.where("email LIKE '%@domain.com'").find_each do |user|
user.update_attributes(
email: user.email.sub('@domain.com', '@newdomain.com')
)
end
答案 1 :(得分:2)
您可以对所有用户进行迭代,并使用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;