Ruby 如何通过Sequel以数组的形式检索postgresql中存储的数组?
我有一个ruby脚本,一个postgres数据库,我使用Sequel gem连接到数据库 我想存储和检索记录,其中一些列值是数组(设置为Ruby 如何通过Sequel以数组的形式检索postgresql中存储的数组?,ruby,postgresql,sequel,Ruby,Postgresql,Sequel,我有一个ruby脚本,一个postgres数据库,我使用Sequel gem连接到数据库 我想存储和检索记录,其中一些列值是数组(设置为text[]作为数据类型)。因此,我为sequel加载pg_数组扩展 我创建了一个散列{id:1,key1:Sequel.pg_数组([“lorem ipsum”,“caesar”,“quidquid id est,timeo danaos])} 我可以通过table.insert hash插入散列,它会创建外观正确的记录 id |
text[]
作为数据类型)。因此,我为sequel加载pg_数组
扩展
我创建了一个散列{id:1,key1:Sequel.pg_数组([“lorem ipsum”,“caesar”,“quidquid id est,timeo danaos])}
我可以通过table.insert hash
插入散列,它会创建外观正确的记录
id | key1
----+--------------------------------------------------------
1 | {"lorem ipsum",caesar,"quidquid id est, timeo danaos"}
基于这个有利的结果,我推断数据库
,续集gem
和pg_数组
扩展都设置正确
但是,当我使用advisors.where(id:1)通过sequel
再次检索记录时,我得到了这个
[{:id => 1, :key1 => "{\"lorem ipsum\",caesar,\"quidquid id est, timeo danaos\"}"}]
:key1
的值作为字符串返回。我无法理解这些文件的头绪。是否有人有办法将其直接转换回最初的阵列:[“lorem ipsum”、“caesar”、“quidquid id est、timeo danaos”]
非常感谢您的新手检查,在您的模型中添加以下内容
serialize :key1, Array
这通常是在将pg_数组
扩展加载到Sequel::Database
实例中时处理的。也许您只是加载了pg_数组
扩展文件,而没有将其加载到Sequel::Database
实例中。你可能已经做到了:
Sequel.extension :pg_array
而不是:
DB.extension :pg_array
您需要将pg_array
扩展加载到Sequel::Database
实例中,以使检索到的值类似于数组而不是字符串。感谢您的快速回复。我没有使用Rails,所以我不确定这是否适用。我可以创建一个模型,但它将无法根据您的链接从ActiveRecord::Base继承。正如预期的那样,在您的解决方案之后,我会出现以下错误:(Adviser:Class的未定义方法“serialize”)
。这是因为我的模型无法从ActiveRecors继承,因为在此设置中我不使用rails。