我在非常奇怪的日期范围内运行查询问题。当我使用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
答案 0 :(得分:1)
你必须在那里使用lambda。截至目前,DateTime.now.utc
是在应用程序启动时计算的,并使用应用程序代码进行缓存。
您需要将范围编写为:
scope :running_auctions, lambda {
{
:where => { :end_time.gt => DateTime.now.utc },
:order_by => [:end_time, "ASC"]
}
}