私は、1つのdbテーブルの列の時間(datetime)にマップする2つのフィールドの日付と時刻を持つフォームを持っています。 フィールドの日付はdatepickerの文字列フィールドで、timeはdatetime_selectです。私はutcタイムゾーンではないので、私はset_dateメソッドで2時間を引く必要があります。モデルのbefore_validationフィルタでdatetime_selectを正しい時間で上書きする方法はありますか?
これをより一般的な方法で実装するにはどうすればよいですか?
# 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
私は時間を得るためにdatetime入力を使用しているのを見ます。私は時間入力が十分であると思う。 – Dorian
そうです。現在、set_dateメソッドで日付が正しく設定されているかどうかを確認するためのデバッグのためだけです。 – tonymarschall