2013-02-12 15 views
3

我在模型範圍:爲什麼AREL將ORIN(NULL)添加到BETWEEN條件中?

scope :daily, lambda {|day| where :post_time => 
    [day.beginning_of_day() .. day.end_of_day()] } 

:post_time是在數據庫中聲明不爲空,但AREL堅持添加虛假IN (NULL)到生成的SQL:

SELECT `<table>`.* FROM `<table>` 
WHERE (`<table>`.`post_time` 
    BETWEEN '2013-02-05 00:00:00' AND '2013-02-05 23:59:59' 
    OR `<table>`.`post_time` IN (NULL)) 

我怎樣才能阻止它這樣做?很明顯,我可以再添加一個條件not_eq(nil):post_time != nil或類似的,但我的問題是爲什麼 AREL做到這一點,以及如何防止它沒有額外的條件否定它。

回答

3

它看起來像通過傳遞一系列範圍來混淆arel(儘管爲什麼這會增加額外的子句,我不確定)。

scope :daily, lambda {|day| where :post_time => 
    (day.beginning_of_day() .. day.end_of_day()) } 

應該沒問題。

+1

對我的尷尬,我必須認爲,直到現在我還以爲'[from..to]'**是[範圍]的語法(http://www.ruby-doc.org/core- 1.9.3/Range.html)... – 2013-02-12 13:24:34

相關問題