我正在尝试将以下请求清理为发送到MySQL服务器:
INSERT INTO `table`
SELECT NULL, t.`id`, ?, ?
FROM `table` AS t
WHERE t.`some_field` = ?
棘手的部分是该请求将在不是我的模型类的类中执行。它看起来像这样:
class Model < ActiveRecord::Base
def some_method
Service.new(self).run
end
end
class Service
def initialize(model)
@model = model
end
def run
# Here is the request
end
end
我见过很多人使用Model#sanitize_sql
,但这是一种受保护的方法,在我的上下文中无法使用。
有什么想法吗?
修改:
有人建议我的问题可能与this one重复。我在发布之前已经看过这个问题了,但是我提供的答案在我的案例中并不相关:我不想使用quote
,因为我的大多数字段都是数字值。另一个答案表明不使用原始SQL,但是,正如评论中所述,我不认为ActiveRecord能够生成INSERT...SELECT
query。 (This question似乎证实了这一点)