Ruby on rails Ruby/大十进制-无法执行保存
我有一列需要容纳18位数值。它在我的rails文件中定义为 Schema.rbRuby on rails Ruby/大十进制-无法执行保存,ruby-on-rails,ruby,sql-server,Ruby On Rails,Ruby,Sql Server,我有一列需要容纳18位数值。它在我的rails文件中定义为 Schema.rb t.decimal "revenue", precision: 23, scale: 5 现在,当我在console中尝试以下操作时: obj = Model.last obj.revenue = 999999999999999999 ( 18 nines) obj.save is returning false (我已确认最大收入应小于10000000000000000(1后跟18个零) 模态参数的
t.decimal "revenue", precision: 23, scale: 5
现在,当我在console中尝试以下操作时:
obj = Model.last
obj.revenue = 999999999999999999 ( 18 nines)
obj.save is returning false
(我已确认最大收入应小于10000000000000000(1后跟18个零)
模态参数的验证:
validates :revenue , numericality: {:greater_than => WBConstants::MIN_REVENUE_LIMIT, :less_than => WBConstants::MAX_REVENUE_LIMIT}, allow_blank: true
错误消息表示该值应小于100…(1后跟18个零)
我无法拯救。
我使用的数据库是sqlserver
列数据类型为decentral(23,5)这是Rails中的一个错误,并且已经存在一个错误 在修复程序合并之前,您可以一直这样做 是什么导致了这个错误? 使用
Kernel.float将Rails内部绑定到浮点。float
:
f = Kernel.Float(999_999_999_999_999_999)
#=> 1.0e+18
f < 1_000_000_000_000_000_000
#=> false
f == 1_000_000_000_000_000_000
#=> true
有关详细信息,请参阅。到目前为止,您可以使用自定义验证来解决此问题。 请查看以下链接:
希望这对您有所帮助。数据库中的列类型是什么?您可以显示您的验证定义吗?您可以添加下划线以增强可读性:
1_000_000_000_000_000_000
验证中的常量是如何定义的?这似乎是Rails中的一个错误。该值由Kernel.Float
和Kernel.Float定义的(999_999_999_999_999_999)
返回1.0e+18
。是的,上面建议了相同的解决方案。
(999999999999999000..1000000000000001000).map { |i| i.to_f.to_i }.uniq
#=> [999999999999998976,
# 999999999999999104,
# 999999999999999232,
# 999999999999999360,
# 999999999999999488,
# 999999999999999616,
# 999999999999999744,
# 999999999999999872,
# 1000000000000000000,
# 1000000000000000128,
# 1000000000000000256,
# 1000000000000000384,
# 1000000000000000512,
# 1000000000000000640,
# 1000000000000000768,
# 1000000000000000896,
# 1000000000000001024]