Как удалить все записи в одной из таблиц базы данных в приложении Ruby on Rails?
Как удалить все записи в одной из таблиц базы данных в приложении Ruby on Rails?
Ответы:
Если вы ищете способ обойтись без SQL, вы можете использовать delete_all.
Post.delete_all
или с критериями
Post.delete_all "person_id = 5 AND (category = 'Something' OR category = 'Else')"
См. Здесь для получения дополнительной информации.
Записи удаляются без предварительной загрузки, что делает это очень быстро, но нарушает такие функции, как кеш счетчика, который зависит от кода rails, который будет выполняться при удалении.
ActiveRecord
моделями. Вопрос касается удаления записи из «таблицы», и я просто указываю на предположение, содержащееся в ответе.
Если вы имеете в виду удалить все экземпляры всех моделей, я бы использовал
ActiveRecord::Base.connection.tables.map(&:classify)
.map{|name| name.constantize if Object.const_defined?(name)}
.compact.each(&:delete_all)
select
всякий раз, когда вам нужно использовать выражение if внутри блока, так вам не придется связывать компактный метод для удаления элементов nil.
BlogPost.find_each(&:destroy)
Если ваша модель называется BlogPost, это будет:
BlogPost.all.map(&:destroy)
MOPED: 127.0.0.1:27017 QUERY database=a_database collection=nothings selector={} flags=[:slave_ok] limit=0 skip=0 batch_size=nil fields=nil (0.3378ms)
Более свежий ответ в случае, если вы хотите удалить все записи в каждой таблице:
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.