Я пытаюсь использовать exec_query
для запуска произвольного запроса со значениями, введенными через привязки, и я получаю непредвиденные ошибки.Rails exec_query bindings ignored
Запуск этого в консоли
sql = 'SELECT * FROM foobars WHERE id IN (?)' name = 'query_name_placeholder' binds = [FooBar.first] ActiveRecord::Base.connection.exec_query sql, name, binds
Урожайность эту ошибку:
Account Load (7.9ms) SELECT "foobars".* FROM "foobars" ORDER BY "foobars"."id" ASC LIMIT 1 PG::SyntaxError: ERROR: syntax error at or near ")" LINE 1: SELECT * FROM foobars WHERE id IN (?) ^ : SELECT * FROM foobars WHERE id IN (?) ActiveRecord::StatementInvalid: PG::SyntaxError: ERROR: syntax error at or near ")" LINE 1: SELECT * FROM foobars WHERE id IN (?) ^ : SELECT * FROM accounts WHERE id IN (?) from /Users/foo_user/.rvm/gems/[email protected]_project/gems/activerecord-4.2.3/lib/active_record/connection_adapters/postgresql_adapter.rb:641:in `prepare'
Он появляется синтаксис привязки игнорируется? Я тоже пробовал ... WHERE id = ?
, но безрезультатно.
'exec_query' является частью интерфейса драйвера низкого уровня, поэтому вы должны использовать собственные заполнители базы данных в случае PostgreSQL, который будет' $ 1', '$ 2', ... Как только вы закончите, вы, вероятно, столкнулись с «NoMethodError», потому что «binds» - это не то, что ожидается; Я не знаю, как будет выглядеть «привязка», поскольку ни один из этих материалов не документирован, а код, стоящий за ним, является обычным непостижимым недостатком, который вы находите внутри Rails. –