2011-12-09 49 views
1

在Rails中,是有办法在一个语句运行多个SQL查询,这样说: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。我的意思是,为什么将它们转换为API中的循环时,SQL可以更好地处理它?

回答

0

我会将所有替换代码翻译成Ruby代码,然后使用runner来运行它。例如:

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

感谢您的回答,但我应该说明,我认为使用gsub运行它们会浪费资源,因为它在SQL中处理速度更快,效率更高。我的意思是,为什么将它们转换为API中的循环时,SQL可以更好地处理它? – kakubei

+0

那么你根本不应该使用Rails。写一个mysql脚本;) – lucapette

+0

我有一个Rails API,我试图将所有的PHP API迁移到它。 – kakubei