我是Rails的新手,我需要确定一种方式,通过这种方式我可以更新User表中所有记录的电子邮件域。
例如User表中所有记录的email列都有@xyz.com域。我想把这个域改成一个新域。@abc.com
我看到过不同的答案都在使用
User.update_all(some_column: "bar")
但这对我不起作用。有谁能指点我一下吗?由于
一个非常简单但不是非常快速的解决方案:
User.find_each { |usr| usr.update(email: usr.email.sub('@xyz.com', '@abc.com')) }
当表中有很多用户没有'@xyz.com'电子邮件地址时,你可能想首先加载匹配的用户:
User
.where("email LIKE '%@xyz.com'")
.find_each { |usr| usr.update(email: usr.email.sub('@xyz.com', '@abc.com')) }
最快的解决方案当然是在纯SQL中更新记录,但语法可能取决于您正在使用的数据库引擎。当你的表不是太大(数十万条记录)时,可能不值得不使用Rails。