Rails 3 update_all с использованием данных, уже содержащихся в таблице, для каждой записи

Это смутно связано с: Как обновить все даты в таблице Но только если сильно прищуриться.

Часть 1. Я знаю, что SQL может обновлять один столбец в таблице на основе формулы, которая включает другие столбцы в той же таблице. И это можно сделать с помощью одной простой строки SQL, как показано ниже:

UPDATE thieving_prices SET current_price = (1 + usury_rate) * current_price;

Теперь все цены только что выросли из-за их различных связанных злодейских ставок.

Часть 2 - Я также знаю, что Rails 3 предлагает чудесное волшебство под названием update_all, которое создает запрос UPDATE с использованием одной строки SQL:

ThievingPrice.update_all(:current_price = 35000.00)

генерирует:

UPDATE thieving_prices SET current_price = 35000.00;

Теперь все цены идентичны для всех продуктов . Очень бесполезно в этом подлом магазине.

Часть 3 - Все эти цены имеют свои собственные устойчивые темпы роста, и должен быть способ написать элегантную строку кода в Rails 3 для достижения этой цели.

И строка:

ThievingPrice.update_all(:current_price => (1 + :usury_rate) * :current_price)

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

ThievingPrice.each do |tp|
  new_price = tp.current_price * (1 + tp.usury_rate)
  tp.update_attribute(:current_price => new_price)
end

К тому времени, когда мои жертвы, посетителей покинули магазин.Какие у меня варианты?

5
задан Community 23 May 2017 в 12:31
поделиться