Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Rails 3使用表中已包含的数据按记录进行更新_Sql_Ruby On Rails 3_Update All - Fatal编程技术网

Sql Rails 3使用表中已包含的数据按记录进行更新

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

这与: 但前提是你斜视得很厉害

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

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+高利贷利率)*当前_价格”)