Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 获取Rails中decimal属性大于0的记录_Ruby On Rails_Activerecord - Fatal编程技术网

Ruby on rails 获取Rails中decimal属性大于0的记录

Ruby on rails 获取Rails中decimal属性大于0的记录,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我在Rails 3.1.0.rc4应用程序中有一个事务模型,该模型具有十进制属性金额。我有amount属性大于0的记录,也有amount属性小于0的记录。我想获取金额大于0的所有记录。我尝试了Transaction.where('amount>0')和Transaction.where('amount>0.0'),但在这两种情况下,都返回了所有记录,包括金额为负数的记录。当我运行Transaction.where('amount

我在Rails 3.1.0.rc4应用程序中有一个
事务
模型,该模型具有十进制属性
金额
。我有amount属性大于0的记录,也有amount属性小于0的记录。我想获取金额大于0的所有记录。我尝试了
Transaction.where('amount>0')
Transaction.where('amount>0.0')
,但在这两种情况下,都返回了所有记录,包括金额为负数的记录。当我运行
Transaction.where('amount<0')
Transaction.where('amount<0.0')
时,不会返回任何记录

可以对十进制属性执行这些类型的查询吗?

您尝试过吗

Transaction.where('amount > ?', 0.0)

问题在于SQLite和迁移—如果打开SQLite数据库并运行
SELECT typeof(amount)FROM transactions LIMIT 1
,您将看到Rails将十进制字段创建为BLOB类型,而不是十进制实型

我不确定这是否是Rails的bug,但目前您可以通过在where子句中输入数量来避免它:

Transaction.where("CAST(amount AS REAL) > 0")

您还可以在迁移过程中使用直接SQL,使用
execute
方法创建
amount
作为一个真正的字段(请参阅)

是的,我确实在做这件事,但为了简洁起见,我把它省略了。