Time attribute gets changed when saved to database in Rails
我有一个叫做事件的模型,它有一个时间属性。我将其设置为Time.now,并在保存之前将时间记录在对象上,如预期的那样,它是当前时间之后的一两秒。但一旦对象被保存并在数据库中找到,时间就不同了,日期部分是2000年1月1日。是什么造成的?我该怎么做才能确保我的时间正确保存?编辑:列类型为time,数据库为sqlite。
- 哪个数据库?什么是列类型?
- 如果列类型为datetime,并且保存了Time.now,则它应该可以正常工作。
- 请按照@muistooshort的建议提供列类型和数据库适配器。
- 如果您发布事件迁移,我们可以为您提供更具体的响应。根据我下面的回复,您的迁移可能有t.time: time,您可能希望更改为t.datetime,但除非您向我们展示,否则我们无法100%确定。
- 知道数据库中的"时间"值是什么样子也很有帮助。
听起来您可能保存的是time对象,而不是date对象。
活动记录允许您使用time、date和datetime对象。
但是,如果您使用的是time或date对象,它们仍然是(不好的解释方式,请参阅下面的链接响应了解更多详细信息)完整的datetime对象。当你读到它们时,日期会出现在time对象上(通常是2000年1月1日)。
What can I do to make sure my times are saved correctly?
号
如果保存/读取完整的datetime对该字段很重要,则可以考虑将代表您的模型的迁移更改为使用:
. …而不是:
号
有关更多详细信息,请参阅此响应:https://stackoverflow.com/a/3929047/1026898
- 我不认为"它们仍然是完整的datetime对象"是准确的。如果我用PostgreSQL创建一个日期列,它将是Ruby中的日期和数据库中的日期。
- 你说得对。这就是为什么我说这是一个糟糕的解释方式的一部分。这是一个很好的信息量,不必要的扩大了这个职位。这就是为什么我添加了一个更具描述性的答案的链接。
- 但是你仍然有三种不同的类型,我不知道2000-01-01会从哪里来。
- 这个问题有很多变量,我们在这里看不到,这可能是导致这个问题的具体原因(例如,不同的数据库处理时间值的方式不同)。