Я хочу использовать один запрос для обновления многих записей в моей базе данных Postgres с использованием хеша или массива Ruby, вместо того чтобы выполнять итерацию по каждой записи и вызывать отдельный Обновить.Одиночный запрос Postgres для обновления многих записей с использованием локального хэша/массива
# {:id => :color}
my_hash = {
1 => 'red',
2 => 'blue',
3 => 'green'
}
Как я не хочу, чтобы это сделать, потому что он делает три последовательных запросов:
my_hash.each do |id, color|
MyModel.where(id: id).update_all(color: color)
end
Как я хочу сделать это:
MyModel.connection.execute <<-SQL
UPDATE my_models
SET color=something
FROM somehow_using(my_hash)
WHERE maybe_id=something
SQL
Похоже, что это будет работать, но создание и уничтожение таблицы кажется много накладных расходов (это?), И, кажется, своего рода громоздким, чтобы сделать необходимый текст сделки: my_hash.map {| ID, цвет | "когда # {id}, затем '# {color}'"}. join ("\ n") – LikeMaBell
Я вижу. На самом деле я не рубиновый пользователь и не знаю его возможностей. Однако, я думаю, что третий вариант может быть полезен. См. Обновленный ответ. – klin