Ruby on rails 获取Rails ActiveRecord';日期时间';属性作为DateTime对象
我的一个模型中有一个属性,它包含一个日期/时间值,并在迁移中使用Ruby on rails 获取Rails ActiveRecord';日期时间';属性作为DateTime对象,ruby-on-rails,datetime,activerecord,time,Ruby On Rails,Datetime,Activerecord,Time,我的一个模型中有一个属性,它包含一个日期/时间值,并在迁移中使用t.datetime:end\u on声明 当我使用myevent.end\u on获取此值时,我得到一个Time对象。问题是,当我尝试将此属性用作图表中的轴时,它无法正常工作,因为Flotila只将日期识别为Date或DateTime对象 我曾考虑编写一个虚拟属性,将现有的时间值转换为日期时间,但我对此持谨慎态度,因为我听说时间无法处理2040年以后的日期,我不希望冒险创建一个“2040 bug”以供以后担心 有什么方法可以说服A
t.datetime:end\u on声明
当我使用myevent.end\u on
获取此值时,我得到一个Time
对象。问题是,当我尝试将此属性用作图表中的轴时,它无法正常工作,因为Flotila只将日期识别为Date
或DateTime
对象
我曾考虑编写一个虚拟属性,将现有的时间值转换为日期时间,但我对此持谨慎态度,因为我听说时间无法处理2040年以后的日期,我不希望冒险创建一个“2040 bug”以供以后担心
有什么方法可以说服ActiveRecord返回此属性的日期时间对象而不是时间对象吗?您可以使用Time::to_date
或Time::to_DateTime
非常轻松地转换Time
对象。有关这方面的更多信息:
因此,您应该如下更改代码:
myevent.ended_on.to_date
# or
myevent.ended_on.to_datetime
始终可以创建一个方法来覆盖该属性,如下所示:
class YourModel
....
def ended_on
self['ended_on'].to_datetime # if you need date object use to_date instead
end
....
end
如果您使用的是64位机器,那么2038年之后的日期就不会有问题,希望这会有所帮助。至少我可以创建2038年以后的时间实例。谢谢,这似乎可以完成这项工作。我实际使用的代码是self['ended\u on']和&self['ended\u on']。to_datetime
,因此它不会有任何关于nil值的问题。我仍然有点担心2040,但我想在那之前会有很多新版本的Rails需要升级。