2017-01-30 2 views
1

amount 속성이 주어진 값인 데이터베이스의 레코드를 업데이트해야합니다. amount 속성은 BigDecimal으로 저장됩니다.BigDecimals를 찾아서 업데이트 할 곳의 레일

금액을 업데이트하는 구체적 방법은 14977을 499700으로 잘못 저장하고 49700을 49700으로 잘못 저장하는 것이 었습니다. 따라서 일부 정확한 14.97 값과 일부 149700 값은 물론 497 값과 49700 값이 있습니다.

나는 float로 변환 할 때 BigDecimal 양의 속성은, 149,700 될 모든 레코드를 찾은 다음 14.97 이러한 레코드를 업데이트하지만 BigDecimal 및 4.97-49700에 대해 동일하게 그것을 저장해야합니다.

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 방법이있다