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

时间:2011-06-20 17:35:01

标签: ruby-on-rails activerecord

我在Rails 3.1.0.rc4应用程序中有一个Transaction模型,带有十进制属性amount。我有amount属性大于0的记录以及amount属性小于0的记录。我想得到金额大于0的所有记录。我试过Transaction.where('amount > 0')和{{1但在这两种情况下,都会返回所有记录,包括负数量的记录。当我运行Transaction.where('amount > 0.0')Transaction.where('amount < 0')时,不会返回任何记录。

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

2 个答案:

答案 0 :(得分:2)

你试过这个吗?

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

答案 1 :(得分:1)

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

我不确定这是否是一个Rails错误,但暂时你可以通过在where子句中输入数量来绕过它:

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

您也可以使用execute方法在迁移过程中使用直接SQL来创建amount作为REAL字段开始(参见http://api.rubyonrails.org/classes/ActiveRecord/Migration.html)。