Удаление всех записей в таблице базы данных

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

Ответ 1

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

Post.delete_all

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

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

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

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

Ответ 2

Чтобы удалить с помощью SQL

Item.delete_all # accepts optional conditions

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

Item.destroy_all # accepts optional conditions

Все здесь

Ответ 3

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

rake db:purge

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

rake db:test:purge

Ответ 4

BlogPost.find_each(&:destroy)

Ответ 5

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

ActiveRecord::Base.connection.tables.map(&:classify)
  .map{|name| name.constantize if Object.const_defined?(name)}
  .compact.each(&:delete_all)

Ответ 6

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

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.

Ответ 7

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

BlogPost.all.map(&:destroy)