我需要从数组中搜索id字段。我使用的是PG
宝石,所以我想我应该使用TextEncoder::Array.new.encode(myarray)
在合格名单推。 PostgreSQL
结构如下:
SELECT id FROM tablename WHERE fieldname IN ('alpha', 'bravo', 'charlie')
因此,我的在开始数组Ruby
。将['alpha', 'charlie', 'bravo']
,所以这是我的当前语法:
a = ['alpha', 'bravo', 'ccharlie']
b = $conn.exec_params( %Q{ SELECT id FROM tablename WHERE fieldname IN ( $1 ) }, [ PG::TextEncoder::Array.new.encode(a) ] )
puts b.inspect
exec_params
显然需要一个阵列,即使它是一个单一的数组元素。但使用PG::TextEncoder::Array.new.encode(a)
导致以下结构:
"{alpha,bravo,charlie}"
...这是一个对象(.class)。我得到的不正确结果是没有找到记录,这是错误的。
如何将Ruby
数组作为第一个PG
参数放置在其中?
更新:
我一直在使用:
...AND NOT (mytable.field = ANY ($6))
其中$6
是这样的:
PG::TextEncoder::Array.new(elements_type: PG::TextEncoder::String.new)
在PG::TypeMapByColumn.new
实例。的Ruby
阵列那将会在那里,是有效的,保持的值。正是在这个例子中,在一个阵列中的一个元素串,在我的SQL语句中使用。一切都很好,但是没有用。如果我实际看到将SQL语句发送到db
,这将有所帮助。这里太多了。
答案 0 :(得分:0)
我找到了答案:...AND NOT hashtag = ANY ($1)...
其中$ 1是正确的Ruby
array
。 PG gem
人实际上并不支持它。