Rails ActiveRecord: ищем независимую от БД версию этого утверждения - PullRequest
1 голос
/ 03 декабря 2011

У меня есть миграция, которая выполняет это на сервере MySQL:

ActiveRecord::Base.connection.execute("update 'comments' set 'slug' = NULL;")

Цель этого оператора - удалить значение "slug" для каждой строки.
Таблица содержит миллионы строк и работает очень медленно при использовании ruby, например, Comment.each...

Есть ли способ переписать этот запрос таким образом, чтобы он не зависел от БД ИЛИ как минимум работал нормально между MySQL и postgresql?

Спасибо!

1 Ответ

4 голосов
/ 03 декабря 2011
Comment.update_all(:slug => nil)

Генерирует запрос UPDATE "comments" SET "slug" = NULL

Вы также можете выполнять пакетные обновления для областей и условий. Например, вы можете иметь:

Comment.where(:some_attribute => "some_value").update_all(:slug => nil)

Это дало бы UPDATE "comments" SET "slug" = NULL WHERE (some_attribute = 'some_value')

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...