2011-06-20 4 views
1

Rails 3.1.0.rc4のamount属性のモデルにTransactionモデルがあります。 amount属性が0より大きいレコードとamount属性が0より小さいレコードがあります。合計が0より大きいすべてのレコードを取得したいとします。Transaction.where('amount > 0')Transaction.where('amount > 0.0')を試しましたが、どちらの場合もall負の金額を含むレコードが返されます。 Transaction.where('amount < 0')またはTransaction.where('amount < 0.0')を実行すると、レコードは返されません。Railsで小数点以下の属性が0より大きいレコードを取得します

10進数の属性に対してこれらのタイプのクエリを実行することはできますか?

答えて

1

問題はSQLiteのと、あなたの移行である - あなたはSQLiteデータベースを開き、SELECT typeof(amount) FROM transactions LIMIT 1を実行する場合は、RailsはBLOB型の代わりに、小数REALタイプとして、あなたの10進数フィールドを作成していることがわかります。

私は、これはRailsのバグであるかないかどうかわからないんだけど、時間のためにあなたがあなたのwhere句で量をキャストすることによって、それを回避することができている:

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

ます。また、これを回避することができますexecuteメソッドを使用してマイグレーションで直接SQLを使用して、amountをREALフィールドとして作成してください(http://api.rubyonrails.org/classes/ActiveRecord/Migration.html参照)。

+0

私はSQLiteを使用していたと述べたはずです... – SZH

2

これを試しましたか?

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

はい、私は実際にこれをやっていますが、私は簡潔にするためにそれを残しました。 – SZH

関連する問題