как очистить всю базу данных в 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, вы можете вызвать ее из скрипта.