Rails Activerecord/Postgres时间格式

13

我正在使用Postgres数据库开发一个Rails项目,其中一个模型有一个时间列,被称为(机智地)time。在创建模型时,我将此列的数据类型设置为“time”,可能错误地理解为此数据类型仅用于存储时间,而不是日期。

t.time :time

然而,当我向模型提交数据时,时间是正确的,但是前面有一个错误的日期:

time: "2000-01-01 16:57:19"

我只想让该列存储时间(如“16:57:19”)。 “time”是正确的数据类型吗?还是有其他方法可以处理这个问题?

非常感谢。


2
Rails应该将time类型映射到Postgres时间类型。你确定在开发环境中使用的是Postgres而不是SQLite吗? - max
@max:OP 没有在映射任何内容,是 ActiveRecord 在进行映射。请参见下文。 - mu is too short
是的 - 我已经设置好在开发中使用Postgres。 - skwidbreth
1个回答

22
问题在于Ruby或Rails中没有时间类。所有的时间类都是日期或时间戳(即日期加上一天的时间)。
在数据库中,它将是不带时区的时间(time),并且它将在数据库中正常运作。但是,一旦时间进入Ruby,ActiveRecord会添加一个日期组件,因为没有可用的纯时间类,它只是使用2000-01-01作为日期。
在数据库内部一切都很好,但是在Rails中如果你在数据库外面需要忽略日期组件,就需要小心谨慎。

好的,那很有趣,谢谢。我之前不知道这个。 - skwidbreth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接