在使用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
就好了。
答案 0 :(得分:1)
这是因为rails中的Float::INFINITY
定义为1.0 / 0,sqlite3不知道如何处理它。您可以使用一个非常大的数字来定义无穷大,如9e999,以替换您将保存到数据库的值