Массовое обновление по идентификаторам

В таблице около 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')

Надеюсь, поможет.

Другие вопросы по тегам