出于与问题无关的原因,我不得不手动构建一个相当复杂的查询,而不是使用ActiveRecord.该查询当前返回一个PostgreSQL数组数据类型,我正在try 将其映射到比Rails默认提供的类型更有用的Ruby类型.
伪代码如下:
SELECT
ARRAY_AGG(u.id) AS awesome_data
FROM u
GROUP BY condition
records = []
ActiveRecord::Base.connection.select_all(
ActiveRecord::Base.send(:sanitize_sql_array, [
query,
# parameters
])
).each do |record|
records << record
end
这个查询运行得很好,返回了我所期望的结果,但是awesome_data
列的类型返回为string
,并且包含类似{1,2,3,4}
的值.
几个问题:
- 有什么方法可以让Rails理解该列是数组类型并将其解析为数组吗?
- 有没有什么实用方法可以帮我把它解析成一个整数数组?
- 我必须自己解析这个值吗?
限制:
我们必须假设有必要以这种方式查询数据库,而不是通过ActiveRecord.
环境:rails 6.1、Ruby 3.2和PostgreSQL 12