使用ActiveRecord清理原始SQL

时间:2017-03-30 15:36:44

标签: sql ruby rails-activerecord

我正在尝试将以下请求清理为发送到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似乎证实了这一点)

0 个答案:

没有答案