在Ruby on Rails中使用无限浮点数

时间:2015-05-31 19:32:31

标签: ruby-on-rails ruby activerecord sqlite

在使用SQLite3的Rails应用程序中,我想在具有浮点属性的模型中使用浮点值Float::INFINITY-Float::INFINITY。使用INSERT运行Model.create!查询似乎工作正常,因为在这种情况下,activerecord使用预准备语句。但是,当我尝试使用foo.save更新记录时,activerecord不使用准备好的stament,只是将字符串Infinity放在查询中,从而产生

SQLite3::SQLException: no such column: Infinity

有没有办法解决这个问题,还是我需要在模型/数据库中使用字符串?

Rails版本3.2.21,SQLite3版本1.3.10

编辑。目前我在数据库迁移中将列类型更改为string并使用

serialize :property, Float

告诉activerecord在数据库中存储YAML序列化的浮点数,允许存储Float::INFINITY就好了。

1 个答案:

答案 0 :(得分:1)

这是因为rails中的Float::INFINITY定义为1.0 / 0,sqlite3不知道如何处理它。您可以使用一个非常大的数字来定义无穷大,如9e999,以替换您将保存到数据库的值