2017-02-23 32 views
0

在值爲1456299399553483799的模型中,Bigint列在通過as_json運行時轉換爲像1456299399553483800這樣的內容。Rails bigint with as_json截取

在序列化bigint以避免截斷時,是否有一種簡單/內置的方法將數字轉換爲字符串?

+2

這很有趣。如果你發現任何東西,請分享。 –

回答

0

一個可能的解決方案 - 我添加以下代碼作爲一個初始化:

# config/initializers/bigint_serializer.rb 

class Integer 
    def as_json(options = nil) 
    self > 2147483647 ? self.to_s : self 
    end 
end 

這從https://github.com/rails/rails/blob/v5.1.4/activesupport/lib/active_support/core_ext/object/json.rb#L95覆蓋的Numeric#as_json默認行爲,並在超過4個字節的更大的數字結果簽訂最大的int正在變成一個字符串。

請注意,我很確定你在切換到字符串之前確實可以使用更大的int值 - 也許9007199254740991,但是我將它保留爲最大4字節int,因爲我不需要更小的整數(見What is JavaScript's highest integer value that a Number can go to without losing precision?