让我们说我有一些用户,我想更新他们的年龄,因为我一开始就把他们弄错了。我一次可以做一个:
User.find(20).update(age: 25)
但是我可以拉一个数组给用户,然后用另一个数组中的相应位置更新每个人吗?我在想像这样的东西:
User.find([20,46,78]).update_all(age: [25, 50, 43])
我有一个用户ID列表及其正确年龄应该是什么,因此我想为这些用户更改现有ID。最好的方法是什么?
答案 0 :(得分:1)
一种方法,如果您的后备存储是MySql / Maria,则可以执行以下操作:
arr = { 1 => 22, 2 => 55}.map { |id, age| "(#{id}, #{age})" }
User.connection.execute("INSERT into users (id, age) VALUES #{arr.join(',')} ON DUPLICATE KEY UPDATE age = VALUES(age)")
这是假设您的表名是users
。小心。由于SQL是手动编写的,因此请注意注入问题。根据您的需求,此解决方案可能对您不起作用。大多数情况下,它会绕过ActiveRecord,因此您将不会获得任何验证或回调。