Для истинного TRUNCATE
вы можете использовать execute
для запуска необработанного SQL.
ActiveRecord::Base.connection.execute("TRUNCATE TABLE #{table_name}")
В ваших примерах с использованием моделей не выполнялись истинные TRUNCATE
запросы.
destroy_all
не TRUNCATE
таблица.Он «уничтожает условия соответствия записей, создавая каждую запись и вызывая ее метод уничтожения» ( link ). delete_all
ближе - он игнорирует обратные вызовы - но все же не TRUNCATE
.
Использование метода execute
удаляет строки из базы данных без создания экземпляров модели.
Кроме того, фактический запрос TRUNCATE
, по крайней мере в MySQL, будет сброшенавтоинкремент первичного ключа, так что следующая вставляемая запись будет иметь идентификатор 1.