2011-09-14 12 views
1

私のモデルにはstart_timeとend_timeの2つの列があります。レールで日付時間オブジェクトを操作する

このモデルを生成するためのビューには、日付のクールなカレンダーと時間のための素晴らしいタイムセレクターがありますが、これをもっとエレガントにする方法はわかりません。私は、この混乱を避けるために、データベースのフォームから日付と時刻の両方を保存できるようにしたいと考えています。

私はこの解決策を思いつき、私がそれを見るたびに気分が悪くなります。これをもっときれいにするためのアイデアはありますか?

attr_accessor :start_time_time, :end_time_time, :start_time_date, :end_time_date 

def start_time_date 
    self.start_time.try(:strftime,DATE_FORMAT) 
end 

def end_time_date 
    self.end_time.try(:strftime, DATE_FORMAT) 
end 

def start_time_time 
    self.start_time.try(:strftime, TIME_FORMAT) 
end 

def end_time_time 
    self.end_time.try(:strftime, TIME_FORMAT) 
end 

def start_time_date=(date) 
    begin 
    self.start_time = nil 
    self.start_time = Time.zone.parse("#{Date.strptime(date, DATE_FORMAT).to_formatted_s(:db)} #{start_time_time}") unless date.blank? 
    rescue 
    errors.add(:start_time_date) 
    end 
end 

def end_time_date=(date) 
    begin 
    self.end_time = nil 
    self.end_time = Time.zone.parse("#{Date.strptime(date, DATE_FORMAT).to_formatted_s(:db)} #{end_time_time}") unless date.blank? 
    rescue 
    errors.add(:end_time_date) 
    end 
end 

def start_time_time=(time) 
    begin 
    self.start_time = Time.zone.parse("#{Date.strptime(start_time_date, DATE_FORMAT).to_formatted_s(:db)} #{time}") unless start_time_date.blank? or time.blank? 
    rescue 
    errors.add(:start_time_time) 
    end 
end 

def end_time_time=(time) 
    begin 
    self.end_time = Time.zone.parse("#{Date.strptime(end_time_date, DATE_FORMAT).to_formatted_s(:db)} #{time}") unless end_time_date.blank? or time.blank? 
    rescue 
    errors.add(:end_time_time) 
    end 
end 

答えて

0

私はあなたがstart_time.to_timeをやってもto_dateインスタンスメソッドを呼び出すことにより、DateTimeオブジェクトを操作することができますTimepicker addon by Trentで一度上記を行います。上記のアクセサを設定する必要はありません。

Ryanさんからwatch this screencastさんの提案があります。彼のUIピッカーの日付情報が#createアクションでどのように保存されているかに注意してください。 Timepickerアドオンを使用すると、時刻も定義でき、DateTimeは日付と時刻の両方の情報で適切に更新されます。