2

クラスで比較的単純な名前付きスコープを構築しようとしていProductsます。奇妙なことに、クエリを直接発行すると(a la Product.where())、期待どおりの結果が得られます。ただし、このクエリがscope宣言に変更された場合、結果セットはになりnilます。

クエリを直接呼び出すと機能するのに、スコープにすると何も生成されないのはなぜですか?実際のコードは次のとおりです。

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)

ありがとうございました!

トム

4

1 に答える 1

3

で定義されたスコープは、が定義されscopeたときに1回評価されます。つまり、アプリインスタンスが最初に起動されたときを指します。scopeDateTime.now

試す:

scope :is_queued, lambda { where("status = 2 OR (status = 0 AND status_expires > ?)", DateTime.now) }
于 2012-03-03T14:58:43.620 に答える