【发布时间】:2020-12-30 03:49:18
【问题描述】:
我要疯了吗? time 属性在保存活动记录对象后失去其值并重置为 2000 年 1 月 1 日。数据库是 Postgres。 Rails 5.2 和 pg gem 1.1.3
2.6.6 :019 > obj.end_time = Date.new(2019, 9,9)
=> Mon, 09 Sep 2019
2.6.6 :020 > obj.save
=> true
2.6.6 :021 > obj.end_time
=> Mon, 09 Sep 2019 00:00:00 UTC +00:00
2.6.6 :022 > obj.end_time.class
=> ActiveSupport::TimeWithZone
但是现在如果我从数据库重新加载,值会被重置:
2.6.6 :023 > obj.reload
2.6.6 :024 > obj.end_time
=> Sat, 01 Jan 2000 00:00:00 UTC +00:00
2.6.6 :025 > obj.end_time.class
=> ActiveSupport::TimeWithZone
postgres 列类型在 psql 中显示为“没有时区的时间”。如果我想设置日期部分,我想我只需要在迁移中指定日期时间而不是时间?
我尝试在迁移change_column :school_courses, :start_time, :datetime 中更改列类型,但得到:
PG::DatatypeMismatch:错误:列“start_time”无法转换 自动键入没有时区的时间戳提示:您可能 需要指定“USING start_time::timestamp without time zone”
不知道怎么做
【问题讨论】:
-
我无法使用基本模型重现此问题,您是否在模型类中执行了可能会影响此的操作?
-
必须与 Postgres 中的列类型有关。我在模型中什么都没有,它正在其他地方发生。将尝试检查 psql
-
那么它对您发布模型和 postgres 表定义 (DDL) 会有所帮助。
-
在 Rails 中,模式只是表示列的“时间”。正如我所提到的,在表上的 psql 中运行 \d 会将列类型设置为“没有时区的时间”。您是否推荐了另一个 psql 命令可以提供更多信息?
-
@rigyt 您能否发布您如何编写工作迁移(解决方案)?
标签: ruby-on-rails postgresql timezone