通过as_json运行时,值为1456299399553483799的模型中的Bigint列会转换为类似于1456299399553483800的内容。
是否有一种简单/内置的方法可以在序列化bigint时将数字转换为字符串以避免截断?
答案 0 :(得分:0)
一种可能的解决方案 - 我将以下代码添加为初始化程序:
# config/initializers/bigint_serializer.rb
class Integer
def as_json(options = nil)
self > 2147483647 ? self.to_s : self
end
end
这将覆盖Numeric#as_json
的{{1}}的默认行为,并导致大于4字节有符号max int的数字被转换为字符串。
注意,我很确定你在切换到一个字符串之前确实可以使用更大的int值 - 也许是9007199254740991但是我把它保留为最大的4字节int,因为我没有'需要更小的整数(见https://github.com/rails/rails/blob/v5.1.4/activesupport/lib/active_support/core_ext/object/json.rb#L95)