在 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.
可能是不值得的
我是 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.
可能是不值得的