2016-08-25 2 views
1

Rails 4.2.4에서 4.2.5로 응용 프로그램을 업그레이드 한 후 10 진수 속성에 이상한 문제가 있습니다.4.2.4에서 4.2.5로 업그레이드 한 후 소수점 이하 반올림

소수점 이하의 속성을 가진 클래스가 있습니다. 예를 들어, Salary 클래스는 net_pay입니다. 나는 그것들이 단지 두 개의 십진법을 가지고 있다는 것을 검증하기 위해 그 속성들에 대한 검증을 가지고있다. 업그레이드 후 해당 돈 속성에 대한 모든 유효성 검사가 실패했습니다 (속성을 2 자리 소수점 이하의 값으로 설정하고 레코드가 유효하지 않은지 확인하려고 시도 함). 콘솔을보고 이상한 행동을 발견했습니다.

Running via Spring preloader in process 18463 
Loading development environment (Rails 4.2.5) 
irb(main):001:0> salary = Salary.new 
=> #<Salary id: nil, net_pay: nil, account_debit: nil, payment_at: nil, comment: nil, attachment: nil, approved_at: nil, status: 0, created_at: nil, updated_at: nil> 
irb(main):002:0> salary.net_pay = 123.456789 
=> 123.456789 
irb(main):003:0> salary.net_pay 
=> #<BigDecimal:55b6facd4400,'0.12346E3',18(27)> 
irb(main):004:0> salary.net_pay.to_s 
=> "123.46" 

뭐라고? 내 소수는 어디 갔어?! 알림 0.12346E3. 나는 4.2.4과 같은 예를 시도하고 여기 결과입니다

Running via Spring preloader in process 18756 
Loading development environment (Rails 4.2.4) 
irb(main):001:0> salary = Salary.new 
=> #<Salary id: nil, net_pay: nil, account_debit: nil, payment_at: nil, comment: nil, attachment: nil, approved_at: nil, status: 0, created_at: nil, updated_at: nil> 
irb(main):002:0> salary.net_pay = 123.456789 
=> 123.456789 
irb(main):003:0> salary.net_pay 
=> #<BigDecimal:563cf1cb59d8,'0.123456789E3',18(36)> 
irb(main):004:0> salary.net_pay.to_s 
=> "123.456789" 

왜 레일이 자동으로 4.2.4에서 4.2.5의 진수 속성의 규모를 설정하지 않는 이유는 무엇입니까? (필자는 마이 그 레이션에 scale: 2를 선언했습니다.)

먼저

업데이트, 내가 직접, 그때는 4.2.5로 업데이트 4.2.7.1으로 업데이트하려고 노력하고 동일한 문제가있어. 나는 레일은 물론 다른 보석을 많이 업데이트 의미 갱신하지만, 레일을 업그레이드하기 전에 모든 보석을 업데이트

-gem 'rails', '4.2.4' 
+gem 'rails', '4.2.5' 

...

그리고 루비 버전

이 변경되지 않습니다 : 나의 Gemfile

DIFF :

ruby -v 
ruby 2.2.5p319 (2016-04-26 revision 54774) [x86_64-linux] 

답변

관련 문제