Rails Scope не работает, когда Regular где () делает запрос - PullRequest
2 голосов
/ 03 марта 2012

Я пытаюсь построить относительно простую именованную область в моем классе Products. Как ни странно, если я выполняю запрос напрямую (а-ля 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)

Спасибо!

Tom

1 Ответ

3 голосов
/ 03 марта 2012

Области, определенные с помощью scope, оцениваются один раз, когда определено scope, поэтому DateTime.now относится к моменту запуска экземпляра приложения.

Попробуйте:

scope :is_queued, lambda { where("status = 2 OR (status = 0 AND status_expires > ?)", DateTime.now) }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...