簡體   English   中英

活動記錄欄上的條件3

[英]where conditions on active record rails 3

我正在嘗試添加一個條件,其中只從模型中獲取滿足條件的記錄。 例如,我試圖只從Transaction模型中獲取記錄,其中:price大於或不等於0(我已嘗試>和!=但在下面的示例中均未使用)。

price = Transaction.where(:company_id => company).where(:price != 0.00)

我也試過這個:

price = Transaction.where(:company_id => company).where(:price != 0.00).collect{|item| if item.price.to_f > 0.00 {item.price.to_f} end}

......以及上述兩種不起作用的其他變體。

上面的第一個示例不會產生錯誤,但根本不起作用。 條件被忽略了。 第二個示例產生語法錯誤。

我也很確定有一種方法可以在SQL中使用條件,但不知道如何去做。

有什么建議么?

這個:

.where(:price != 0.00)

和說:

.where(true)

作為符號永遠不會等於浮點數; where(true)沒有意義,因為它只是將數據庫的真實文字(PostgreSQL的't' ,SQLite和MySQL中的1 )添加到WHERE子句中,並且沒有做任何有用的事情; 例如,如果你說:

Transaction.where(:company_id => company).where(:price != 0.00)

然后你的SQL將在PostgreSQL中像這樣結束:

select * from transactions where company_id = #{company} and 't'

這就像說的一樣

select * from transactions where company_id = #{company}

當查詢混淆時,有時在Rails控制台的末尾添加.to_sql並查看SQL最終會做什么是有幫助的(如果您不了解SQL,那么如果您打算使用SQL,則應該學習它任何能力的關系數據庫)。

您想將比較發送到數據庫,而不是在Ruby中執行:

price = Transaction.where(:company_id => company)
                   .where('price != ?', 0)

我假設您的price列是十進制類型而不是浮點類型; 如果我錯了,那么現在把它改成小數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM