mongoid日期范围查询的奇怪行为。 - Rails 3

时间:2011-07-22 06:24:24

标签: ruby-on-rails ruby mongodb mongoid

我在非常奇怪的日期范围内运行查询问题。当我使用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>

请注意,我的约会时间是7月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

请注意我的日期时间是星期五,2011年7月22日06:12:59 +0000

什么使查询日期早于实际当前日期? mogoid或mongodb在那里做缓存吗? 如果我遗失了什么,请告诉我。

更新

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 个答案:

答案 0 :(得分:1)

你必须在那里使用lambda。截至目前,DateTime.now.utc是在应用程序启动时计算的,并使用应用程序代码进行缓存。

您需要将范围编写为:

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