Rails несколько SQL-запросов в одном выражении - PullRequest
1 голос
/ 09 декабря 2011

В 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));
..."

Edit: Я должен объяснить, что я думаю, что запускать их с помощью gsub - это пустая трата ресурсов, когда обрабатывать их в SQL намного быстрее и эффективнее. Я имею в виду, зачем переводить их в цикл в API, если SQL может справиться с этим намного лучше?

1 Ответ

0 голосов
/ 09 декабря 2011

Я бы перевел все замены в код Ruby, а затем использовал runner для его запуска.Что-то вроде:

Dvd.all.each do |dvd|
  # your substitutions here
  dvd.actor= dvd.actor.gsub(/foo/,'bar')
  dvd.save
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...