Как мне написать миграцию, которая удалит определенные записи из моей базы данных? - PullRequest
2 голосов
/ 10 октября 2010

У меня есть модель Note с полем note_type.Как написать миграцию, которая удалит записи заметок из базы данных, если тип «short_note»?

Ответы [ 3 ]

4 голосов
/ 10 октября 2010

Сам код прост.

Note.delete_all :type => 'short_note'

(Если у примечаний есть обратные вызовы уничтожения, вам нужно вместо этого запустить destroy_all. Это медленнее, потому что они удаляются по одному, ноиногда может обеспечить лучшую целостность данных.)

Тем не менее, я думаю, что вы немного больше беспокоитесь о нисходящей миграции, чем о восходящей миграции.Это необратимое преобразование по своей природе.Ответ на этот конкретный вопрос состоит в том, что ваша миграция должна вызывать исключение ActiveRecord::IrreversibleMigration.

Однако всякий раз, когда вы пишете необратимую миграцию, важно учитывать, почему вы это делаете.В зависимости от вашей ситуации, возможно, более уместно просто выполнить эту конкретную команду в консоли при развертывании на рабочем месте, чем сделать эту миграцию частью самого определения вашего приложения.

0 голосов
/ 10 октября 2010

В self.up:

Note.delete_all("type = 'short_note'");

или используйте destroy_all, который вызовет метод уничтожения записи и обратные вызовы (before_destroy и after_destroy):

Note.destroy_all("type = 'short_note'");
0 голосов
/ 10 октября 2010
def self.up
  execute "DELETE FROM notes WHERE note_type = 'short_note'"
end

: - P

Шучу.Я уверен, что вы могли бы сделать это:

Note.delete_all :note_type => 'short_note'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...