0

对 ActiveRecord 产生低效或错误的 DELETE 查询感到失望,我正在寻找一种能够以安全的方式执行直接 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])
4

2 回答 2

1

不幸的是,我认为没有更简单的方法可以利用连接。但至少有可重复使用的卫生助手。

请参阅ActiveRecord::Base#sanitize_sql文档)。

Model.send(:sanitize_sql, {:foo => "bar"})
于 2013-02-14T04:28:01.717 回答
-3

你为什么不试试这个:

执行(<<-SQL

使用细节从 my_objects 中删除 my_objects.details_id = details.id AND my_objects.my_value = #{params[:value]} AND details.my_id = #{params[:id]}

SQL

于 2013-02-14T00:45:49.090 回答