2013-02-13 69 views
0

對ActiveRecord產生了不滿,導致DELETE查詢效率低下或出錯,我正在尋找一種以安全的方式執行直接SQL查詢的能力,沒有SQL注入的可能性。直接SQL查詢中的問號

我知道有一個的WHERE子句一個安全的變體:

MyObject.joins(:details) 
.where('my_objects.my_value = ? and details.my_id = ?', 
params[:value], params[:id]) 

是否的execute的安全的變體存在嗎?喜歡的東西:

execute(<<eos 
DELETE FROM my_objects 
USING details 
WHERE 
    my_objects.details_id = details.id 
    AND my_objects.my_value = ? 
    AND details.my_id = ? 
eos 
, params[:value], params[:id]) 

回答

1

不幸的是,我不認爲有一個更簡單的方法可以利用連接。但至少,有條件的可重複使用的衛生工作者。

請參閱ActiveRecord::Base#sanitize_sqldocs)。

Model.send(:sanitize_sql, {:foo => "bar"}) 
-3

爲什麼不ü嘗試這樣的:

執行(< <-SQL

DELETE FROM my_objects 使用細節 WHERE my_objects.details_id = details.id AND my_objects.my_value =#{params [:value]} AND details.my_id =#{params [:id]}

SQL