1

我有一个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_date2012-06-10 10:20:00 UTC

这是输出DateTime.now2012-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)
}
4

2 回答 2

0

更改配置的替代方法是:

def future_event?
  self.start_date.utc >= Time.zone.now.utc
end
于 2012-06-10T15:29:48.303 回答
0

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

应用程序.rb

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

模型.rb

def future_event?
  self.start_date >= Time.zone.now
end
于 2012-06-10T16:59:06.933 回答