我在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')
时,不会返回任何记录。
是否可以对十进制属性执行这些类型的查询?
答案 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)。