我的模型中有两列,start_time和end_time。
生成这个模型的视图有一个很酷的日期日历和一个漂亮的时间选择器,但我无法弄清楚如何使这更优雅。我希望能够将我的表单中的日期和时间存储在数据库中而不会出现这些问题,Rails必须有更好的方法,对吗?
我想出了这个解决方案,每次看到它都会让我感到恶心。关于如何让这个更漂亮的任何想法?
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 :(得分:0)
我使用Timepicker addon by Trent一次完成上述操作您可以通过执行start_time.to_time
并调用to_date
实例方法来操作DateTime对象。您根本不需要设置任何上述访问者。
我建议您使用Ryan watch this screencast,注意他的UI选择器中的日期信息是如何通过#create动作保存的。当您使用Timepicker插件时,您也可以定义时间,并且DateTime将适当地更新日期和时间信息。