在值爲1456299399553483799的模型中,Bigint列在通過as_json運行時轉換爲像1456299399553483800這樣的內容。Rails bigint with as_json截取
在序列化bigint以避免截斷時,是否有一種簡單/內置的方法將數字轉換爲字符串?
在值爲1456299399553483799的模型中,Bigint列在通過as_json運行時轉換爲像1456299399553483800這樣的內容。Rails bigint with as_json截取
在序列化bigint以避免截斷時,是否有一種簡單/內置的方法將數字轉換爲字符串?
一個可能的解決方案 - 我添加以下代碼作爲一個初始化:
# 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?)
這很有趣。如果你發現任何東西,請分享。 –