ruby-on-rails - Postgres 将选定的 json_agg'regated 字符串视为一个数组
问题描述
在以下查询(*)中,我发现它foo_ids
以数组的字符串表示形式返回。当我最终运行to_json
我的ActiveRecord::Base.connection.select_all
结果时,我看到它当然在结果输出中被表示为一个字符串。
SELECT
bar.a,
bar.b,
bar.c,
(
SELECT JSON_AGG(DISTINCT foo_id)
FROM foo
WHERE bar.id = foo.bar_id
) AS foo_ids
FROM bar
我可以做些什么来将所需的选择作为数组放入最终的 JSON 输出中,而无需修改中间结果?
(*) 该问题的查询已被简化。
解决方案
我在@unabridged 对这个问题的回答的帮助下解决了这个问题:Getting typed results from ActiveRecord raw SQL。
我还使用array_agg
而不是json_agg
确保数据将是稍后转换为 JSON 的数组。
我得出的结论是,没有办法解决这个问题,我只需要找到一种合适的方法来使用 ActiveRecord 转换类型,如下所示:
result = ActiveRecord::Base.connection.select_all(query)
.to_a.map { |o| o.each { |k, v| o[k] = result.column_types[k].cast(v) } }
query
SQL 字符串在哪里。
推荐阅读
- python - 从嵌套字典中获取公共键值对
- angular - detectChanges() 未在 Angular 的对象数组中触发
- mysql - mysql外键没有反映到它的引用
- javascript - 可以存储信息的 Discord bot(Python 或 Javascript)
- vim - 使用 vim 删除段落中的所有内容
- swift - Swift - 如何使用 NSSecureCoding 对 Bool 类型进行编码
- azure - Azure 中 Docker 中的 Orocrm
- python - ConnectionAbortedError [WinError 10053] 已建立的连接被主机中的软件中止
- arrays - 数组中的最大素数
- mysql - 使用 Objection JS 如何使用 withGraphFetched 选择特定列