ActiveRecord - Найти строки с массивом и обновить столбец с массивом значений? - PullRequest
0 голосов
/ 26 сентября 2018

Допустим, у меня есть несколько пользователей, и я хочу обновить их возраст, потому что сначала я их неправильно указал.Я мог бы сделать их по одному:

User.find(20).update(age: 25)

Но можно ли вытащить пользователей с помощью массива, а затем обновить каждого индивидуума с соответствующим местом в другом массиве?Я представляю себе что-то вроде:

User.find([20,46,78]).update_all(age: [25, 50, 43])

У меня есть список идентификаторов пользователей и их предполагаемый возраст, поэтому я хочу изменить существующие для этих пользователей.Какой лучший способ сделать это?

1 Ответ

0 голосов
/ 03 октября 2018

Один из способов сделать это, если ваше резервное хранилище - 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, поэтому вы не получите никакой проверки или обратных вызовов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...