2011-06-20 69 views
1

我在具有十進制屬性amount的Rails 3.1.0.rc4應用中有Transaction模型。我有金額屬性大於0的記錄以及金額屬性小於0的記錄。我想要獲得金額大於0的所有記錄。我嘗試了Transaction.where('amount > 0')Transaction.where('amount > 0.0'),但在兩種情況下,所有記錄被返回,包括負數的記錄。當我運行Transaction.where('amount < 0')Transaction.where('amount < 0.0')時,不會返回任何記錄。獲取Rails中十進制屬性大於0的記錄

是否可以對這些類型的查詢進行十進制屬性?

回答

1

問題是與SQLite和您的遷移 - 如果你打開你的SQLite數據庫和運行SELECT typeof(amount) FROM transactions LIMIT 1你會看到Rails正在創建十進制字段作爲一個BLOB類型,而不是小數REAL類型。

我不知道這是否是一個Rails錯誤或沒有,但暫時由你的where子句中鑄造量,你可以避開它:

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

您也可以解決這個問題通過在遷移過程中使用直接SQL與execute方法創建amount作爲開頭的REAL字段(請參閱http://api.rubyonrails.org/classes/ActiveRecord/Migration.html)。

+0

我應該提到我正在使用SQLite ... – SZH

2

你試過嗎?

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

是的,我正在做這件事,但爲了簡潔起見,我將它放在了外面。 – SZH