2012-03-03 26 views
2

我想在我的Products類中構建一個相對簡單的命名範圍。奇怪的是,如果我直接發出查詢(a la Product.where()),我會得到我期望的結果。但是,如果此查詢更改爲scope聲明,則結果集爲nilRails範圍不工作當經常在哪裏()查詢

爲什麼我的查詢在直接調用時工作,但是當它變成一個範圍時什麼都不產生?這裏是實際的代碼:

scope :is_queued, where("status = 2 OR (status = 0 AND status_expires > ?)", DateTime.now)# <-- returns nil 
Product.where("status = 2 OR (status = 0 AND status_expires > ?)", DateTime.now) # <-- returns 1+ results (as expected) 

謝謝!

湯姆

回答

3

scope定義的範圍進行評估一次,在定義scope時 - 所以DateTime.now是指當你的應用程序實例第一次開始。

嘗試:

scope :is_queued, lambda { where("status = 2 OR (status = 0 AND status_expires > ?)", DateTime.now) } 
+0

原來是這樣的組合,再加上一個被遺忘的,有關空'is_queued'類方法還掛出下文件。哎呀! :-) 謝謝。 – 2012-03-03 15:18:52