如何在数据库中获取原始的“created_at”值(不是转换为 ActiveSupport::TimeWithZone 的对象)

Posted

技术标签:

【中文标题】如何在数据库中获取原始的“created_at”值(不是转换为 ActiveSupport::TimeWithZone 的对象)【英文标题】:How to get the raw 'created_at' value in the database (not an object cast to an ActiveSupport::TimeWithZone) 【发布时间】:2011-06-30 16:44:48 【问题描述】:

假设我有一个帖子模型。

数据库中的一条记录将是:

23|title_here|content_here|2011-02-20 08:01:55.583222|2011-02-20 08:01:55.583222

最后两个字段(2011-02-20 08:01:55.583222|2011-02-20 08:01:55.583222)是 created_at 和 updated_at 字段。

那么,

post = Post.find_by_id(23)

问题:如何在数据库中获取 created_at 字符串:“2011-02-20 08:01:55.583222”?

我们知道,post.created_at 将返回一个ActiveSupport::TimeWithZone 对象,而不是原始字符串。

请帮忙:)

【问题讨论】:

您可以简化对Post.find(23)的查找调用 【参考方案1】:

试试

Post.find_by_id(23).created_at.to_s

【讨论】:

这将得到类似这样的内容:“2011-02-12 09:10:32 UTC”。但我想要的是“2011-02-20 08:01:55.583222”女巫包含毫秒信息。 这将产生没有毫秒信息的日期时间。【参考方案2】:

使用attributes_before_type_cast

Post.find(23).attributes_before_type_cast["created_at"]

Post.find(23).read_attribute_before_type_cast("created_at")

编辑

你也可以这样调用:

Post.find(23).created_at_before_type_cast

根据Accessing attributes before they have been typecasted.

【讨论】:

第一个解决方案也适用于读取序列化的数据 好了,恭喜 5 位数 @rubyprince @rubyprince 很抱歉,SO 比我们更聪明,因此撤销了我的投票。无论如何,很快就会有 5 位数!

以上是关于如何在数据库中获取原始的“created_at”值(不是转换为 ActiveSupport::TimeWithZone 的对象)的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 4中的倍数数据库原始选择中的转义值

如何从 postgres JSONB 列中获取值?

如何使用查询生成器向 created_at 字段插入值

在 Python 中使用 factorize() 后如何获取原始值?

如何在 laravel 5.4 中仅获取 created_at 日期而不是时间

如何在Rails 6中获取用户与朋友的多对多关联的created_at?