5

これは漠然と関連しています: テーブル内のすべての日付を更新する方法 しかし、あなたが本当に目を細めている場合に限ります。

パート1-SQLは、同じテーブルの他の列を含む式に基づいて、テーブルの1つの列を更新できることを知っています。そしてそれは次のようにSQLの単一の単純な行で行うことができます:

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

現在、すべての価格は、関連するさまざまな悪意のある料金によって引き上げられています。

パート2-Rails3には、SQLの1行を使用してUPDATEクエリを作成するupdate_allと呼ばれるすばらしい魔法が用意されていることも知っています。

ThievingPrice.update_all(:current_price = 35000.00)

生成:

UPDATE thieving_prices SET current_price = 35000.00;

現在、すべての価格はすべての製品で同じです。この卑劣な店では非常に役に立たない。

パート3-これらの価格はすべて独自の着実な上昇率を持っており、それを達成するためにRails3でエレガントなコード行を書く方法があるはずです。

そしてライン:

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 に答える