我目前正在开发一个数据库API,它返回一个ActiveRecord :: Base类调用的结果。现在,当我需要PostGres数据库中的数据时,我使用以下命令:
ApiResponse.select([:id, :ts, :response])
.where(userid: 'toto')
.limit(limit).to_a
这段代码正在查找,我得到一个哈希数组:
[
[ 0] #<ApiResponse:0x007fb27e5d0c40> {
:id => "7cbf6ce2-ec5e-41e0-8185-030f0a70b247",
:ts => 2017-08-28 20:21:09 UTC,
:response => {}}, ...
...
]
ApiResponse只是一个使用ActiveRecord访问数据库的类,定义为:
class ApiResponse < ActiveRecord::Base
现在,基于结果我必须运行以下代码才能使其成为JSON并修改ts字段
new_list = list.map do | e |
{
id: e['id'],
ts: e['ts'].strftime("%F %T.%6N%z"),
response: e['response']
}
end
这个解决方案不是我认为最好的,因为我正在运行地图(列表是select命令的结果)来修改一个字段[ts]以匹配日期/时间格式,其次,我正在做< / p>
return new_list.to_json
需要修改日期/时间是因为PostGres DB使用PostGres日期/时间格式但ActiveRecord使用ISO8601。
我有2个问题:
是否有更快的方法来解析所有数组以在每个ts字段上应用'strftime'?除了使用地图
有没有办法避免使用'to_json'to_json非常慢。为了保护隐私,响应为空,但在我的代码中,它包含大量数据会降低系统速度。
谢谢