我有一个包含两个字段日期和时间的表单,它们映射到一个数据库表列时间(日期时间)。字段日期是 datepicker 的字符串字段,时间是 datetime_select。由于我不在 UTC 时区,我必须在我的 set_date 方法中减去两个小时。
我怎样才能以更通用的方式实现这一点?
# Model
class Task < ActiveRecord::Base
before_validation :set_date
def set_date
if self.date
begin
date = Date.strptime(self.date, '%d.%m.%Y')
rescue
errors.add(:date, "invalid date")
return false
end
# can not get minutes by self.time.minute
self.time = DateTime.new(date.year, date.month, date.mday, self.time.hour.to_i, self.time.strftime("%M").to_i)
# have to set local time manually
self.time = self.time - 2.hours
end
end
# Form
<%= simple_form_for(@task) do |f| %>
<%= f.input :date, :as => :string, :input_html => { :class => 'asdatepicker'} %>
<%= f.input :time, :as => :datetime, :minute_step => 5, :input_html => { :class => 'input-small'} %>
...
# application.rb
config.time_zone = 'Berlin'
config.active_record.default_timezone = :local