Ruby PG Gem使用TextEncoder :: Array在exec_params中的SELECT WHERE字段名中

时间:2019-02-02 18:28:03

标签: arrays ruby postgresql pg

我需要从数组中搜索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,这将有所帮助。这里太多了。

1 个答案:

答案 0 :(得分:0)

我找到了答案:...AND NOT hashtag = ANY ($1)...其中$ 1是正确的Ruby arrayPG gem人实际上并不支持它。