以下是设置:
end_date = DateTime.parse('2010-01-01 12:00:00-04')
有时候它被初始化了:
end_date = 1.days.ago
问题 ...这些named_scope是否会生成相同的 EXACT SQL?
named_scope :before, lambda { |end_date|
{ :conditions =>
["overdraft_transaction_payments.created_at < ?", end_date] }
}
和
named_scope :before, lambda { |end_date|
{ :conditions =>
["overdraft_transaction_payments.created_at < ?", end_date.utc] }
}
在第一个例子中我使用end_date,在第二个例子中我使用end_date.utc。
(可能需要注意......数据库服务器的操作系统设置为CDT,数据库在内部使用UTC。导轨服务器的操作系统设置为CDT,应用程序实例设置为EDT。我意识到这可能不是配置这些系统的最佳方式,但是,手头的问题是ActiveRecord输出。)
值得我的直觉说第一个例子是为本地TZ生成一个时间字符串,第二个例子将生成一个UTC-0。
PS:我可以使用一个迷你测试案例来验证我的直觉吗?
答案 0 :(得分:1)
我相信日期将通过调用“.to_s(:db)”进行转换,您可以在IRB控制台会话中看到将返回的内容:
>> DateTime.parse('2010-01-01 12:00:00-04').to_s(:db)
=> "2010-01-01 12:00:00"
>> DateTime.parse('2010-01-01 12:00:00-04').utc.to_s(:db)
=> "2010-01-01 16:00:00"
>> 1.days.ago.to_s(:db)
=> "2010-08-12 18:01:09"
>> 1.days.ago.utc.to_s(:db)
=> "2010-08-12 18:01:13"