我有一个专栏,我只想存储时间(小时,分钟,秒)。例如,这是一次迁移:
add_column :products, :start_hour, :time
当我插入数据库start_hour
时,始终以1/1/2000
开头,例如:2000-01-01 01:19:00 +0700
。请解释一下原因。
答案 0 :(得分:2)
Ruby或Rails中没有时间类,因此ActiveRecord使用datetime / timestamp类表示time
列。
如果您在没有任何ActiveRecord,Rails或Ruby噪声的情况下查看数据库内部,您将看到HH:MM:SS
时间值。但是当ActiveRecord从数据库中提取time
时,它会将日期组件设置为2000-01-01,因为日期时间必须有一个日期而AR会选择该日期。
每次使用Ruby中的start_hour
时,您都必须忽略日期组件。
答案 1 :(得分:-1)
存储在数据库中的格式之间的差异与Rails无关,而与数据库有关。日期或时间格式仅有效且无效。在您的应用程序内,而不是在数据库中 - 更简单地说,它们只负责时间对象向用户显示的方式,并且不会影响数据的存储方式。最好的办法是将记录保存为时间对象,然后使用rails帮助程序以有意义的方式向用户显示数据,使用strptime
等方法。