2017-01-30 11 views
1

amount属性の値が所定の値であるデータベースのレコードを更新する必要があります。 amount属性はBigDecimalとして保存されます。BigDecimalsを検索して更新するためのクエリ

具体的には、金額を更新する方法で、14977を499700、497を49700として間違って保存していました。正しい14.97の値と149700の値、さらには497の値と49700の値があります。

floatに変換するとamount属性が149700になり、これらのレコードを14.97に更新するすべてのレコードを検索する必要がありますが、BigDecimalと49700〜4.97のレコードとして保存します。

値がfloatだった場合、私はちょうど使用することができます

Foobar.where(amount: 14.97) 

しかし、どのようにあなたがBigDecimal(:amount).to_f == 14.97量を見つけるのですが?

答えて

1

Enumを使用すると、条件に一致するレコードを検索できます。私はselectでいいと思う:

users_to_update.each { |user| user.update_attributes(amount: 14.97.to_d) } 

users_to_update = User.all.select { |user| user.amount.is_a?(BigDecimal) && user.amount.to_f == 14.97 } 

そのようにあなたが行うことができますFloatためto_d方法がある:あなたが何かを行うことができますので

BigDecimalto_f方法を持っています

関連する問題