Rails - экранирование параметров SQL - PullRequest
5 голосов
/ 22 июля 2010

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

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

Ответы [ 2 ]

6 голосов
/ 22 июля 2010

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

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

0 голосов
/ 10 июля 2015

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

escaped_string = Model.send(:sanitize_sql_for_conditions, [
        'id = ? and name = ?',
        params[:id], params[:name]
    ]
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...