как очистить всю базу данных в Rails seeds.rb

Каков наилучший способ сделать это? На данный момент я использую:

Role.delete_all
User.delete_all
...

но как очистить habtm talbes? Как role_users

Обновленный ответ

Я думаю, что ответ ream88 отвечает на мой вопрос наиболее точно, но, вероятно, bestidea заключается в том, чтобы следовать подсказкам к использованию для использования отдельных задач rake и оставлять seeds.rb только для обработки данных.

Это обновленный ответ от ream88, который не удаляет таблицу schema_migrations.

ActiveRecord::Base.establish_connection
ActiveRecord::Base.connection.tables.each do |table|
  # MySQL
  ActiveRecord::Base.connection.execute("TRUNCATE #{table}") unless table == "schema_migrations"

  # SQLite
  # ActiveRecord::Base.connection.execute("DELETE FROM #{table}") unless table == "schema_migrations"
end

Большое спасибо за помощь!

Ответ 1

Я определенно согласен с ответом @coreyward, но если вы действительно хотите очистить все таблицы внутри файла seeds.rb, этот фрагмент выполнит эту работу:

ActiveRecord::Base.establish_connection
ActiveRecord::Base.connection.tables.each do |table|
  next if table == 'schema_migrations'

  # MySQL and PostgreSQL
  ActiveRecord::Base.connection.execute("TRUNCATE #{table}")

  # SQLite
  # ActiveRecord::Base.connection.execute("DELETE FROM #{table}")
end

Ответ 2

Прежде всего, я не думаю, что это хорошая идея, чтобы смешать такие проблемы. Файл seeds.rb предназначен для того, чтобы seeds.rb базу данных данными, а не сбросить ее. Для сброса базы данных (rake db:migrate:reset) уже выполняется рейк-задача, которая просто запускает rake db:drop db:create db:migrate. Если вы хотите засеять новую базу данных, вы можете просто запустить rake db:reset db:seed.

Ответ 3

Вы можете попробовать Rake::Task["db:reset"] invoke.

rake db: reset - это просто задача рейка, которую вы можете вызвать для сброса базы данных, используя Rake :: Task, вы можете вызвать ее из скрипта.