Как удалить все записи в одной из моих таблиц базы данных в приложении 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)