如何在ruby中将ruby数组转换为支持PostgreSQL数组



我有一个ruby数组,需要转换数组以支持PostgresSQL数组。

数组

ruby_array = ["9771", "9773", "9778", "9800", "9806"] 

我需要将其转换为以下格式

postgresSQL_array = {"9771", "9773", "9778", "9800", "9806"} 

使用ruby

如果你正在使用PG gem,使用PG::TextEncoder::Array将Ruby数组转换为PostgreSQL数组

connection.exec(
"select $1::int[]",
[PG::TextEncoder::Array.new.encode([1, 2, 3])]
)

如果你使用的是Ruby on Rails,只需传递Array作为参数,它就会为你转换。

Model.where(nums: [1,2,3])

请注意,你可以用PostgreSQL数组做的大多数事情都可以用JSONB做得更好。

如果您只需要创建该格式的字符串,则可以对Ruby数组进行字符串化,删除第一个和最后一个字符并将其插入大括号之间。

irb(main):001:0> ruby_array = ["9771", "9773", "9778", "9800", "9806"] 
=> ["9771", "9773", "9778", "9800", "9806"]
irb(main):002:0> postgresSQL_array = "{#{ruby_array.to_s[1...-1]}}"
=> "{"9771", "9773", "9778", "9800", "9806"}"
irb(main):003:0> puts postgresSQL_array
{"9771", "9773", "9778", "9800", "9806"}
=> nil