Ruby on rails 在rails模型中使用日期时间对象

Ruby on rails 在rails模型中使用日期时间对象,ruby-on-rails,datetime,Ruby On Rails,Datetime,我的模型中有两列,开始时间和结束时间 生成此模型的视图有一个很酷的日期日历和一个漂亮的时间选择器,但我不知道如何使它更优雅。我希望能够将表单中的日期和时间都存储在数据库中,而不会出现这种混乱,Rails必须有更好的方法,对吗 我想出了这个解决方案,每次我看到它都会恶心。有没有办法让这个更漂亮 attr_accessor :start_time_time, :end_time_time, :start_time_date, :end_time_date def start_time_date

我的模型中有两列,开始时间和结束时间

生成此模型的视图有一个很酷的日期日历和一个漂亮的时间选择器,但我不知道如何使它更优雅。我希望能够将表单中的日期和时间都存储在数据库中,而不会出现这种混乱,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

我一次完成上述操作,您可以通过执行
start\u time.to\u time
并调用
to\u date
实例方法来操作DateTime对象。您根本不需要设置上述任何访问器

我建议您使用Ryan,注意他的UI选择器中的日期信息是如何通过#创建操作保存的。当您使用Timepicker插件时,您也可以定义时间,并且您的DateTime将使用日期和时间信息进行相应的更新