2010-07-21 45 views
5

我做我的轨道模型的一些简单的sql语句(用于纯粹主义者这仅仅是复杂的sql语句:)导轨 - 逃避SQL PARAMS

因为我没有使用find * /病症的方法,是有一个辅助方法我可以直接用它来做到这一点?

回答

6

连接对象上的quote方法转义字符串。在构建查询时,使用sanitize_sql_for_conditions将ActiveRecord条件散列或数组转换为SQL WHERE子句。

ActiveRecord::ConnectionAdapters::DatabaseStatements中的方法适用于直接查询,特别是以select_开头的方法。

+0

是在我的模型中我正在做connection.select_all(sql)。但我无法找到rdoc中的连接对象的“引用”方法,以避免我的输入参数在哪里条件。 – kapso 2010-07-21 22:39:18

+0

好的,我明白了,谢谢! – kapso 2010-07-21 23:54:16

+7

'sanitize_sql_for_conditions'似乎被移动到一个模块并设置为私有。 – lulalala 2012-04-17 08:53:51

0

Rails在内部使用sanitize_sql_for_conditions来处理占位符。当然,这种方法是受保护的,所以你不能(干净地)在ActiveRecord模型之外使用它。你可以绕过保护使用send

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