将DateTime字段与DateTime对象进行比较

时间:2012-06-10 15:25:56

标签: ruby-on-rails

我有Event模型,其中包含start_date类型datetime字段。我有一个简单的模型方法,可以告诉我start_date是否已经激活,或者它是否尚未发生:

def future_event?
  self.start_date >= DateTime.now
end

然后在我看来,我检查我需要加载哪个视图(根据事件是否正在发生或事件是否仍在将来)。我尝试了各种各样的东西,比如将它们都转换为Time对象,字符串格式化等......似乎没有什么工作,总是呈现相同的视图。这是我的观看代码:

<% if @event.future_event? %>
   <%= render "pages/main_container_offline" %>
   <%= render "pages/sidebar_offline" %>
 <% else %>
   <%= render "pages/main_container_online" %>
   <%= render "pages/sidebar_live" %>
<% end %>

有什么想法吗?

编辑:

以下是@event.start_date的输出:2012-06-10 10:20:00 UTC

以下是DateTime.now的输出:2012-06-10T10:35:30-05:00

如您所见,格式不同。我不确定这是不是一个问题。


这是我的控制器方法,它设置@event

def index
  @event = Event.active.order("start_date ASC").first
end

## model
scope :active, lambda {
  where("end_date >= ?", DateTime.now)
}

2 个答案:

答案 0 :(得分:0)

更改配置的替代方法是:

def future_event?
  self.start_date.utc >= Time.zone.now.utc
end

答案 1 :(得分:0)

所以,我终于弄明白了。基本上问题是Rails在UTC时区中保存了所有内容,这总是与我在本地的时间不同(因此渲染不正确)。为了解决这个问题,我不得不告诉Rails和ActiveRecord使用我的时区保存所有内容,并在我的时区中显示所有内容。以下更改解决了我的问题:

application.rb中

config.time_zone = 'Central Time (US & Canada)'
config.active_record.default_timezone = :local

model.rb

def future_event?
  self.start_date >= Time.zone.now
end