it-swarm.com.ru

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

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

120
Justin Meltzer

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

Post.delete_all

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

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

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

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

230
HakonB

Удалить через SQL

Item.delete_all # accepts optional conditions

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

Item.destroy_all # accepts optional conditions

Все здесь

27
lebreeze

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

rake db:purge

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

rake db:test:purge
21
KensoDev

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

ActiveRecord::Base.connection.tables.map(&:classify)
  .map{|name| name.constantize if Object.const_defined?(name)}
  .compact.each(&:delete_all)
5
dfaulken
BlogPost.find_each(&:destroy)
4
Philip

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

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.

2
Simon Ninon

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

BlogPost.all.map(&:destroy)
1
stef