Массовое обновление по идентификаторам
В таблице около 10000–20 000 объектов. У меня есть около 1000 записей идентификаторов, которые вы хотите изменить одно значение. Как это сделать правильно? Я не хочу использовать каждый, который будет 1000 раз вставлять. Я думаю, что это не правильно.
PS Это нормальный вариант?
accounts_closes = Account.where(:alfa_flag => false).pluck(:id)
Account.transaction do
accounts_closes.each do |account_id|
Account.connection.execute 'UPDATE accounts SET open = false WHERE id = ' + account_id + ';'
end
end
1 ответ
Решение
Вы можете посмотреть на этот ответ, в основном вы должны использовать update_all, который создает один запрос на обновление для всех записей одной таблицы. Если вам нужно обновить только определенные записи, вы можете просто использовать, где перед обновлением и цепочку, как:
Book.where('title LIKE ?', '%Rails%').update_all(author: 'David')
Надеюсь, поможет.