1 つの db テーブル列時間 (datetime) にマップされる日付と時刻の 2 つのフィールドを持つフォームがあります。フィールド date は datepicker の文字列フィールドで、time は datetime_select です。私は utc タイムゾーンにいないので、set_date メソッドで 2 時間を減算する必要があります。
これをより一般的な方法で実装するにはどうすればよいですか?
# 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