首页 > 解决方案 > Rails select_all 反序列化 Postgresql 数组

问题描述

我进行了一个自定义查询,该查询返回具有数组值term_names的行

Product.connection.select_all("
  SELECT ARRAY_AGG(terms.name), vocabularies.name vocabulary_name
  FROM terms
  INNER JOIN vocabularies ON vocabularies.id = terms.vocabulary_id
  GROUP BY vocabulary_name")

| term_names                                                     | vocabulary_name |
|----------------------------------------------------------------|-----------------|
| {{76,Yellow},{77,Green},{79,Blue}.                             | Color           |

但问题是 Rails 不想将 {...} 转换为 ruby​​ 数组并将其作为字符串返回。

[{"array_agg"=>"{Yellow,Green,Blue}", "vocabulary_name"=>"Color"}]

如何让 Rails 解析结果并返回嵌套数组?

标签: ruby-on-railsrubypostgresqlactiverecord

解决方案


你(我)应该调用 cast_values 方法

Product.connection.select_all("
  SELECT ARRAY_AGG(terms.name), vocabularies.name vocabulary_name
  FROM terms
  INNER JOIN vocabularies ON vocabularies.id = terms.vocabulary_id
  GROUP BY vocabulary_name").cast_values

推荐阅读