rails,postgres,timezones和scopes的问题

时间:2014-02-23 00:39:57

标签: ruby-on-rails-3 postgresql named-scope

在Rails 3中尝试使用时区时,我们会看到一些时髦的东西。假设我们有一个名为start_at的属性,类型为日期时间。在application.rb中,我们根据服务器位置设置了config.time_zone = 'Eastern Time (US & Canada)'

当有人将start_at设置为“2014-02-22美国东部时间晚上7点”之类的数据时,它存储为“2014-02-23 01:00:00-5”,因此当我设置命名范围时,例如:

scope :tomorrow, where("start_at = ?", Date.tomorrow)

错误地返回该记录。如果我尝试这样的事情:

scope :tomorrow, where("start_at at time zone 'EST' = ?", Date.tomorrow)

它仍然不起作用。如何创建具有db日期时间比较的范围,这些范围考虑了本地时区而不必做一些荒谬的事情,例如:

scope :tomorrow, where("date(start_at - INTERVAL '5 hours') = ?", Date.tomorrow)

1 个答案:

答案 0 :(得分:0)

您必须使用Time.zone选项来使用您配置的区域

scope :tomorrow, where("start_at = ?", Time.zone.today + 1) 

我推荐这篇关于Rails time zones

的好文章