Как выполнить произвольный параметризованный SQL в рельсах - PullRequest
12 голосов
/ 29 декабря 2010

Из соображений производительности мне нужно написать новый метод в моей модели Rails, который выполняет произвольный SQL:

UPDATE table
   SET col1 = ? AND col2 = ?
   WHERE id = ?

Я понимаю, что могу использовать ActiveRecord::Base.connection.execute или ActiveRecord::Base.connection.update со строкой SQL, чтобы получить нужные мне результаты, но какова правильная процедура замены заполнителей параметров (?) фактическими значениями параметров? Существует ли метод Rails для интерполяции параметров в оператор SQL или он должен выполняться вручную? Последнее кажется небезопасным ...

1 Ответ

7 голосов
/ 11 августа 2012

Вы также можете сделать это:

updates = ActiveRecord::Base.send(:sanitize_sql_array, ["name = ? and category = ?", name, category])
ActiveRecord::Base.connection.execute("update table set #{updates} where id = #{id.to_s.to_i}")

to_s вызывается на id до to_i, если это ноль.

...