Как обрабатывать update_all при возврате пустых данных - PullRequest
0 голосов
/ 10 июня 2019

Я обновляю некоторые детали своей базы данных, используя update all. Когда возвращенные данные являются пустыми, обновляются все сбои ActiveRecord :: StatementInvalid: Mysql2 :: Ошибка: неизвестный столбец

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

Product.where(local_product: true).update_all(tax: 0) if Product.where(local_product: true).present?

Хотелось бы, чтобы update_all справился с этим сам или есть какой-то другой способ?

Ответы [ 2 ]

1 голос
/ 10 июня 2019

Просто сделайте это в одной строке, вам не нужно проверять наличие записей.

Product.where(local_product: true).update_all(tax: 0) сгенерирует следующий SQL-запрос:

UPDATE "products" SET "tax" = true WHERE "products"."local_product" = true

База данных фильтрует записи для вас,Вам не нужно проверять его дважды, если нет данных для обновления, это ничего не изменит.

0 голосов
/ 10 июня 2019

Попробуйте, чтобы избежать лишних

@products = Product.where(local_product: true)
@products.update_all(tax: 0) if @products.present?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...