如何在数据库中获取原始的“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 的对象)的主要内容,如果未能解决你的问题,请参考以下文章
在 Python 中使用 factorize() 后如何获取原始值?