Странное поведение с mongoid запросом диапазона дат. - Рельсы 3 - PullRequest
0 голосов
/ 22 июля 2011

У меня очень странная проблема с диапазоном дат. Когда я использую опцию DateTime.now.utc для запроса к базе данных, дата запроса для DateTime.now отличается от моей текущей даты DateTime.now (то есть той, которая возвращается на консоли.)

Мой mogoid.yml использует-

use_utc: true

У меня есть моя именованная область видимости вот так -

scope :running_auctions, {
       :where => { :end_time.gt => DateTime.now.utc },
       :order_by => [:end_time, "ASC"]
 }

И на консоли я могу это сделать -

Загрузка среды разработки (Rails 3.0.7)

irb(main):001:0> Auction.running_auctions
=> #<Mongoid::Criteria
selector: {:end_time=>{"$gt"=>Fri Jul 22 00:42:38 UTC 2011}},
options:  {:sort=>[:end_time, "ASC"]},
class:    Auction,
embedded: false>

Обратите внимание, что моя дата здесь - пятница, 22 июля, 00:42:38 UTC, 2011

irb(main):002:0> DateTime.now
=> Fri, 22 Jul 2011 11:42:56 +0530

irb(main):003:0> DateTime.now.utc
=> Fri, 22 Jul 2011 06:12:59 +0000

Обратите внимание, что мое время: пт, 22 июля 2011 г. 06:12:59 + 0000

Что делает дату запроса старше текущей даты? Могоид или монгодб занимаются там кешированием? Пожалуйста, дайте мне знать, если я что-то упустил.

UPDATE

Loading development environment (Rails 3.0.7)
irb(main):001:0> Auction.running_auctions(DateTime.now.utc)
=> #<Mongoid::Criteria
 selector: {:end_time=>{"$gt"=>Fri Jul 22 01:21:53 UTC 2011}},
 options:  {:sort=>[:end_time, "ASC"]},
 class:    Auction,
 embedded: false>

irb(main):002:0> DateTime.now.utc
=> Fri, 22 Jul 2011 06:52:03 +0000

1 Ответ

1 голос
/ 22 июля 2011

Вы должны использовать там лямбду. На данный момент DateTime.now.utc вычисляется при запуске приложения и кэшируется с кодом приложения.

Вы должны написать свою сферу как:

scope :running_auctions, lambda {
  {
    :where => { :end_time.gt => DateTime.now.utc },
    :order_by => [:end_time, "ASC"]
  }
}
...