Sql Rails 3使用表中已包含的数据按记录进行更新
这与: 但前提是你斜视得很厉害 第1部分-我知道SQL可以根据涉及同一表上其他列的公式更新表上的一列。它可以通过一行简单的SQL完成,如下所示:Sql Rails 3使用表中已包含的数据按记录进行更新,sql,ruby-on-rails-3,update-all,Sql,Ruby On Rails 3,Update All,这与: 但前提是你斜视得很厉害 第1部分-我知道SQL可以根据涉及同一表上其他列的公式更新表上的一列。它可以通过一行简单的SQL完成,如下所示: UPDATE thieving_prices SET current_price = (1 + usury_rate) * current_price; 现在,所有的价格都被各种各样的恶性利率推高了 第2部分-我还知道Rails 3提供了一种奇妙的魔力,称为update_all,它使用一行SQL创建更新查询: ThievingPrice.update
UPDATE thieving_prices SET current_price = (1 + usury_rate) * current_price;
现在,所有的价格都被各种各样的恶性利率推高了
第2部分-我还知道Rails 3提供了一种奇妙的魔力,称为update_all,它使用一行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
当我的顾客们结束时,他们已经离开了商店。我的选择是什么?尝试
偷窃价格。全部更新(“当前价格=(1+)*当前价格”,“高利贷利率”)
。它应该使用参数并根据当前更新的对象将当前价格乘以该金额。不ThievingPrice.update\u all(“当前价格=(1+?)*当前价格”,:高利贷利率)
失败?否,它尝试乘以字符串“高利贷利率”,但是,因为它基于存储在数据库中之前已经验证过的数据,所以我可以安全地更改您的建议如下:ThievingPrice.update_all(“当前_价格=(1+#{:高利贷利率})*当前_价格)这确实有效。谢谢你帮助我以不同的方式看待它。你能把它写进一个答案中,这样我就可以批准它吗?更好的是,我似乎根本不需要逃避报价。这是有意义的,因为这将干净地输入SQL:ThievingPrice.update_all(“当前_价格=(1+高利贷利率)*当前_价格”)