在Rails控制台中为许多用户更新电子邮件域名

时间:2014-08-08 12:02:38

标签: ruby ruby-on-rails-3 activerecord rails-activerecord

我有一个用户模型,其中有一个电子邮件地址为user@domain.com

我想要做的是能够更新系统中的所有用户,将他们的域名从@ domain.com更改为@ newdomain.com

我是否可以通过某种方式运行命令(update_all)或类似于查找结束部分(@ domain.com)的命令,并将所有记录更改为@ newdomain.com?

如果我必须通过控制台或Rails_Admin一个接一个地执行此操作,我希望有一种方法可以以编程方式执行此操作。

2 个答案:

答案 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;