アプリケーションを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]