2010-07-21 47 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] 
    ] 
)