2010-07-21 2 views
5

Я делаю некоторую простую SQLs в моей модели рельсы (для пуристов это только для сложных SQLs :)Rails - выделяющийся SQL PARAMS

Поскольку я не использую методы находки */состояние, есть вспомогательный метод, который Я могу использовать это прямо для этого?

ответ

6

Метод quote на объекте соединения экранирует строки. При создании запросов используйте sanitize_sql_for_conditions для преобразования хэшей или массивов условий ActiveRecord в предложения SQL WHERE.

Методы в ActiveRecord::ConnectionAdapters::DatabaseStatements удобны для прямых запросов, в частности тех, которые начинаются с select_.

+0

да в моей модели я делаю connection.select_all (SQL). Но я не могу найти метод «quote» на объекте соединения в rdoc для того, чтобы ускользнуть от параметров ввода для условий. – kapso

+0

Хорошо, я понял, спасибо! – kapso

+7

'sanitize_sql_for_conditions', кажется, перемещается в модуль и устанавливается в приватный. – lulalala

0

Rails использует sanitize_sql_for_conditions для работы с заполнителями. Конечно, этот метод защищен, поэтому вы не можете (чисто) использовать его вне модели ActiveRecord. Вы можете обойти с помощью send защищенности:

escaped_string = Model.send(:sanitize_sql_for_conditions, [ 
     'id = ? and name = ?', 
     params[:id], params[:name] 
    ] 
)