Вы можете вызвать update
для ActiveRecord::Relation
(результат поиска), и он обновит все объекты. В основном это удобный метод, который выполняет описанный вами цикл и вызывает обновление для каждого объекта. (См .: документы )
Существует также метод update_all
, который работает аналогично delete
в том смысле, что он просто отправляет запрос в базу данных. Это обновит все записи одним запросом. Однако этот не не выполняет ни одну из проверок рельсов или обратных вызовов. На практике это сильно ограничивает полезность этого метода для повседневного кодирования. Я нашел этот метод более полезным для массовых действий в специальных сценариях.
Некоторые комментарии:
Одним из недостатков Rails и ActiveRecord, в частности, является то, что его модель обратного вызова основана на взаимодействии одной записи с базой данных. Хотя это делает кодирование невероятно замечательным, оно делает большие пакетные транзакции действительно тяжелыми. Я лично потратил много времени, работая над этим недостатком. В целом это стоит того, чтобы воспользоваться другими преимуществами.