【问题标题】:Rails Activerecord/Postgres time formatRails Activerecord/Postgres 时间格式
【发布时间】:2016-04-30 22:53:43
【问题描述】:

我正在使用 Postgres 数据库处理 Rails 项目。对于我的一个模型,我有一个时间列,称为(巧妙地)时间。创建模型时,我将此列的数据类型设置为“时间”,(可能不正确)理解为该数据类型仅用于存储时间,不用于存储日期。

t.time :time

但是,当我向模型提交数据时,时间是正确的,但前缀是错误的日期:

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

我只希望该列存储时间(例如“16:57:19”)。 “时间”是要使用的正确数据类型吗?还是有其他方法可以解决这个问题?

非常感谢。

【问题讨论】:

  • Rails 应该将 time 类型映射到 Postgres 时间类型。您确定您在开发环境中使用的是 postgres 而不是 sqlite?
  • @max:OP 没有映射任何东西,ActiveRecord 是。见下文。
  • 是的 - 我将其设置为在开发中使用 Postgres

标签: ruby-on-rails postgresql activerecord time rails-activerecord


【解决方案1】:

问题在于 Ruby 或 Rails 中没有时间类。所有时间类都是日期或时间戳(即日期加上一天中的时间)。

在数据库内部,它将是一个time(不带时区)列,并且在数据库内部会正常运行。然而,一旦时间进入 Ruby,ActiveRecord 将添加一个日期组件,因为没有可用的普通时间类,它恰好使用 2000-01-01 作为日期。

在数据库中一切都会好起来,但是当您在 Rails 中的数据库之外时,您必须小心忽略日期组件。

【讨论】:

  • 好的,这很有趣,谢谢。我不知道。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-03
  • 1970-01-01
  • 2011-02-26
相关资源
最近更新 更多