Как выполнить произвольный параметризованный SQL в рельсах
По соображениям производительности мне нужно написать новый метод в моей модели Rails, который выполняет произвольный SQL:
UPDATE table
SET col1 = ? AND col2 = ?
WHERE id = ?
Я понимаю, что я могу использовать ActiveRecord::Base.connection.execute
или ActiveRecord::Base.connection.update
со строкой SQL, чтобы получить нужные мне результаты, но какова правильная процедура для замены подстановщиков параметров (?
) фактическими значениями параметров? Есть ли метод Rails для интерполяции параметров в SQL-запрос, или это должно быть сделано только путем ручной интерполяции? Последнее кажется небезопасным...
Ответы
Ответ 1
Вы также можете сделать это:
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
в случае его отсутствия.
Ответ 2
Table.where(id:id).update_all(col1:val1, col2:val)
Если я не понял этот вопрос.