在一个语句中Rails多个SQL查询

时间:2011-12-09 14:27:08

标签: ruby-on-rails-3.1

在Rails中,有没有办法在一个语句中运行多个SQL查询,例如:

UPDATE `dvd_actor` SET actor = replace(actor, 'Ó', 'Ó');
UPDATE `dvd_actor` SET actor = replace(actor, 'Á', CHAR(193));
UPDATE `dvd_actor` SET actor = replace(actor, 'É', CHAR(201));
UPDATE `dvd_actor` SET actor = replace(actor, 'Í', CHAR(205));

全部在一个查询中。

这是我在PHP中用来清理数据库的事情,但Rails在第一个之后给出了一个错误。我猜这不是Rails的方式,只是好奇在Rails中最好的方法是什么。

目前我有:

self.connection.execute("UPDATE `dvd_actor` SET actor = replace(actor, 'Ó', 'Ó');
UPDATE `dvd_actor` SET actor = replace(actor, 'Á', CHAR(193));
..."

修改 我应该解释一下,我认为使用gsub运行它们是浪费资源,而在SQL中处理它的速度和速度要快得多。我的意思是,当SQL可以更好地处理它时,为什么要将它们转换为API中的循环?

1 个答案:

答案 0 :(得分:0)

我会将所有替换转换为Ruby代码,然后使用runner来运行它。类似的东西:

Dvd.all.each do |dvd|
  # your substitutions here
  dvd.actor= dvd.actor.gsub(/foo/,'bar')
  dvd.save
end