Удаление всех записей в таблице базы данных - PullRequest
121 голосов
/ 16 марта 2011

Как удалить все записи в одной из моих таблиц базы данных в приложении Ruby on Rails?

Ответы [ 7 ]

231 голосов
/ 16 марта 2011

Если вы ищете путь к нему без SQL, вы можете использовать delete_all.

Post.delete_all

или с критериями

Post.delete_all "person_id = 5 AND (category = 'Something' OR category = 'Else')"

См. здесь для получения дополнительной информации.

Записи удаляются без их предварительной загрузки, что делаетэто очень быстро, но нарушает функциональность, такую ​​как кеш счетчика, который зависит от кода rails, который будет выполнен при удалении.

28 голосов
/ 16 марта 2011

Для удаления с помощью SQL

Item.delete_all # accepts optional conditions

Для удаления с помощью вызова метода уничтожения каждой модели (дорогой, но гарантирует вызов обратных вызовов)

Item.destroy_all # accepts optional conditions

Все здесь

21 голосов
/ 16 марта 2011

если вы хотите полностью очистить базу данных, а не просто удалить модель или прикрепленные к ней модели, вы можете сделать:

rake db:purge

вы также можете сделать это в тестовой базе данных

rake db:test:purge
5 голосов
/ 30 октября 2014

Если вы хотите удалить все экземпляры всех моделей, я бы использовал

ActiveRecord::Base.connection.tables.map(&:classify)
  .map{|name| name.constantize if Object.const_defined?(name)}
  .compact.each(&:delete_all)
4 голосов
/ 24 мая 2013
BlogPost.find_each(&:destroy)
2 голосов
/ 17 октября 2015

Более свежий ответ, если вы хотите удалить все записи в каждой таблице:

def reset
    Rails.application.eager_load!
    ActiveRecord::Base.descendants.each { |c| c.delete_all unless c == ActiveRecord::SchemaMigration  }
end

Подробнее о eager_load здесь .

После вызова мы можем получить доступ ко всем потомкам ActiveRecord::Base и можем применить delete_all ко всем моделям.

Обратите внимание, что мы не очищаем таблицу SchemaMigration.

1 голос
/ 16 марта 2011

Если ваша модель называется BlogPost, она будет:

BlogPost.all.map(&:destroy)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...