將應用程序從Rails 4.2.4升級到4.2.5後,我有一些奇怪的十進制屬性問題。從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"
爲什麼Rails的自動設置小數點屬性的規模4.2.5,而不是4.2.4? (這是一個功能嗎?我已經在我的遷移中聲明scale: 2
)。
更新
首先,我試圖更新到4.2.7.1直接,然後我更新到4.2.5,並得到了同樣的問題。
DIFF我Gemfile
:
-gem 'rails', '4.2.4'
+gem 'rails', '4.2.5'
我的Rails升級前的所有寶石更新,但更新的Rails意味着要更新了很多,當然其他的寶石......
和Ruby版本沒有改變:
ruby -v
ruby 2.2.5p319 (2016-04-26 revision 54774) [x86_64-linux]