2016-08-25 4 views
1

アプリケーションをRails 4.2.4から4.2.5にアップグレードした後、10進数の属性に奇妙な問題があります。4.2.4から4.2.5へのアップグレード後の小数点以下四捨五入

小数点以下の属性を持ついくつかのクラスがあります。たとえば、のクラスはnet_payです。私はそれらの属性を検証して、2つの小数点以下の桁数しか持たないことを確認しています。アップグレード後、これらのmoney属性のすべての検証テストが失敗しました(属性を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" 

はなぜRailsは自動的に4.2.4に4.2.5で、小数点の属性のスケールを設定していませんか? (それは機能ですか?私はマイグレーションにscale: 2を宣言しました)。

まず

アップデートは、私が直接、その後、私は4.2.5にアップデート4.2.7.1にアップデートしようとしましたが、同じ問題を抱えて。私はRailsはもちろん、他の宝石の多くを更新することを意味更新しても、レールをアップグレードする前に、すべての宝石を更新

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

...

とRubyのバージョン

が変更されていない:私はGemfile

差分:

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

答えて

関連する問題