在 rails 迁移中更新电子邮件域

Update email domain in rails migration

我是 Rails 的新手,我需要确定一种方法来更新用户 table 中所有记录的电子邮件域。

例如,用户 table 的电子邮件列包含用户 table 中所有记录的 @xyz.com 域。我想将此域更改为新域。即@abc.com

我看到不同的答案都在使用

User.update_all(some_column: "bar")

但这对我不起作用。谁能指导我解决这个问题。谢谢

一个非常简单但不是很快的解决方案:

User.find_each { |usr| usr.update(email: usr.email.sub('@xyz.com',  '@abc.com')) }

如果 table 中有很多用户没有“@xyz.com”电子邮件地址,那么您可能只想首先加载匹配的用户:

User
  .where("email LIKE '%@xyz.com'")
  .find_each { |usr| usr.update(email: usr.email.sub('@xyz.com',  '@abc.com')) }

最快的解决方案肯定是更新纯 SQL 中的记录,但语法可能取决于您使用的数据库引擎。当您的 table 不是太大(数十万条记录)时,不使用 Rails.

可能是不值得的