5

这与以下内容模糊相关: 如何更新表格中的所有日期 但前提是你真的眯着眼睛。

第 1 部分 - 我知道 SQL 可以根据涉及同一表上其他列的公式更新表上的一列。它可以通过一行简单的 SQL 来完成,如下所示:

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

现在,所有价格都因各种相关的邪恶率而上涨。

第 2 部分 - 我还知道 Rails 3 提供了一种奇妙的魔法,称为 update_all,它使用单行 SQL 创建一个 UPDATE 查询:

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

到完成时,我的受害者顾客已经离开了商店。我有哪些选择?

4

1 回答 1

8

试试ThievingPrice.update_all("current_price = (1 + ?) * current_price" , :usury_rate)。它应该采用参数并根据当前正在更新的对象将当前价格乘以该金额。

于 2012-03-01T05:54:10.980 回答