在我的开发机器上,一切都很好。event_date被存储为UTC,并在活动记录内外进行转换。然而,在heroku上的生产中,rails存储日期而不将其转换为UTC,然后当它被提取时,它被转换为用户的时区,这本质上造成了不准确,因为偏移量没有应用于UTC时间。
我在本地和Heroku上都使用Postgres。
Parameters: {"name"=>"asdfdsafdas", "date"=>"12/19/2013", "time"=>"10:00 PM", "location"=>"asdfdsfds", "description"=>"", "team_id"=>"1", "event"=>{"team_id"=>"1", "description"=>"", "location"=>"asdfdsfds", "name"=>"asdfdsafdas"}}
def create
d = DateTime.strptime(params[:date], '%m/%d/%Y')
t = Time.zone.parse(params[:time])
event_date = Chronic.parse(params[:date] + " at " + params[:time])
params[:event][:event_date] = event_date
params[:event][:user_id] = current_user.id
@event = Event.new
if @event.update_attributes params[:event]
render "events/show"
else
respond_with @event
end
end
event_date变量如下所示:
2013-12-19 20:25:00 -0500
编辑:
我在github上发现了这个问题,这似乎是我所经历的最接近的事情。它实际上看起来是一样的。然而,它是关闭的,但我认为它应该是开放的。
事实证明,问题与我如何构建自定义Time对象有关。以下是有效的代码:
def create
d = Date.strptime(params[:date], '%m/%d/%Y')
t = Time.zone.parse(params[:time])
event_date = t.change(day: d.day, month: d.month, year: d.year)
params[:event][:event_date] = event_date
params[:event][:user_id] = current_user.id
@event = Event.new
if @event.update_attributes params[:event]
render "events/show"
else
respond_with @event
end
end
在这种情况下,event_date变量如下所示:
Wed, 18 Dec 2013 22:00:00 EST -05:00