2013-02-13 5 views
0

비효율적이거나 버그가있는 DELETE 쿼리를 생성하는 ActiveRecord에 실망한 SQL 직접 쿼리가없는 안전한 방법으로 직접 SQL 쿼리를 실행할 수있는 기능을 찾고 있습니다.직접 SQL 쿼리의 물음표

내가 절은 WHERE의 안전한 변형이 알고

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

execute의 안전한 변종이 존재 하는가은? 뭔가 같은 : 자세한 내용 를 사용 my_objects 에서 삭제

(< < - SQL

을 실행 WHERE my_objects.details_id = details.id AND :

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_sql (docs)을 참조하십시오.

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

왜 u는이 시도하지 않는 my_objects.my_value = # {params [: value]} AND details.my_id = # {params [: id]}

SQL