2016-02-22 2 views
0

я следующий код:Использование пустых параметров в quoted_parameters (Params)

pg = ActiveRecord::Base.connection 
res = pg.execute(query % quoted_parameters(params)) 

Это мой pseudoquery:

select project_id from projects where client_id in (%{ids}) 

Это являются Титулы:

{ :ids => [] } 

It отлично работает, когда в массиве идентификаторов есть фактические значения. Однако, похоже, он не способен обрабатывать пустой массив, я получаю:

ERROR: syntax error at or near ")" 

Поскольку он просто помещается в пустую строку.

По умолчанию это работает отлично:

Project.where('client_id in (?)', []) 

И генерирует следующий запрос:

Project Load (3.5ms) SELECT "projects".* FROM "projects" WHERE (client_id in (NULL)) 

Есть ли способ, чтобы получить запрос% quoted_parameters (PARAMS), чтобы создать один и тот же запрос, даже если массив пуст?

ответ

0

Уточнение: Вы пытаетесь вручную использовать SQL в своем приложении? Или спрашиваете, как вы можете добиться этого с помощью AR?

С ActiveRecord вы должны быть в состоянии сделать:

Project.where(client_id: ids)

Это будет работать в ряде ситуаций:

Project.where(client_id: []) 
=> SELECT "projects".* FROM "projects" WHERE 1=0 

Project.where(client_id: [1]) 
=> SELECT "projects".* FROM "projects" WHERE "projects"."client_id" = 1 

Project.where(client_id: [1, 2]) 
=> SELECT "projects".* FROM "projects" WHERE "projects"."client_id" IN (1, 2) 
+0

Я действительно пытаюсь вручную использовать SQL в моем приложении. Как я писал: когда я делаю это со стандартным ActiveRecord, он отлично работает, но я ищу способ сделать это с помощью ручного SQL. Пример SQL, который я написал, является, конечно, примером, а не фактическим SQL (что намного сложнее). – rept

+1

Gotcha. Вы определили 'quoted_parameters'? Или вы ссылаетесь на него из какого-то модуля? –

+0

Привет Дональд. Глупый я, я думал, что цитируемые_параметры были чем-то вроде activerecord, но это не так. Я использовал описанную здесь методику: http://gmile.me/raw-sql-in-a-rails-project/ и теперь вижу, что quoted_parameters - это метод. Теперь я могу это исправить, должен иметь возможность обрабатывать случай пустого массива, который в этом методе. – rept

Смежные вопросы