как очистить всю базу данных в Rails seeds.rb - PullRequest
23 голосов
/ 08 августа 2011

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

Role.delete_all
User.delete_all
...

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

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

Я думаю, что ответ ream88 наиболее точно отвечает на мой вопрос, но, вероятно, лучше всего последовать совету Coreyward об использовании отдельных заданий по рейку и оставить seed.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

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

Ответы [ 3 ]

44 голосов
/ 08 августа 2011

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

16 голосов
/ 08 августа 2011

Я определенно согласен с ответом @ 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
4 голосов
/ 08 августа 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...