我有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)
}
答案 0 :(得分:0)
更改配置的替代方法是:
def future_event?
self.start_date.utc >= Time.zone.now.utc
end
答案 1 :(得分:0)
所以,我终于弄明白了。基本上问题是Rails在UTC时区中保存了所有内容,这总是与我在本地的时间不同(因此渲染不正确)。为了解决这个问题,我不得不告诉Rails和ActiveRecord使用我的时区保存所有内容,并在我的时区中显示所有内容。以下更改解决了我的问题:
config.time_zone = 'Central Time (US & Canada)'
config.active_record.default_timezone = :local
def future_event?
self.start_date >= Time.zone.now
end