2015-05-23 2 views
3

Я хочу передать значение массива рубинового следующим образом:Рубин PG использование драгоценного камня массив, как пары с exec_params

sql = "SELECT $1" 
User.connection.raw_connection.exec_params(sql, [[1,2]]) 

Это возвращает

PG::IndeterminateDatatype: ERROR: could not determine data type of parameter $1 

Если изменить sql к "SELECT $1::int[]" я PG::InvalidTextRepresentation: ERROR: invalid input syntax for integer: "[1, 2]".

Есть ли способ передать массив ruby ​​в exec_params и преобразовать его в массив PostgreSQL?

ответ

0

Вы должны сделать это, как показано ниже:

params = [1, 2] 
sql = params.size.times.map { |n| "$#{n+1}::INT" }.join(",") 
User.connection.raw_connection.exec_params("SELECT #{sql}", params) 
4

Вы можете использовать кодеры, чтобы сделать это:

raw_connection.exec(
    "select $1::int[]", 
    [PG::TextEncoder::Array.new.encode([1, 2])] 
) 
Смежные вопросы