Как удалить все данные из всех таблиц в направляющих?

Помните, что вы можете зарегистрировать несколько обработчиков событий для одного и того же события в jQuery. Таким образом, если ваш обработчик зарегистрирован дважды, ваш обработчик будет запускаться при событии одного клика. Вы можете удалить слушателя, используя метод off

$("body").off("click");

Но я бы предложил зарегистрировать обработчик непосредственно на вашем элементе:

$("#seeds").on("click", function(){
    alert('click fired');
});
62
задан Flip 21 June 2017 в 08:36
поделиться

6 ответов

rake db:reset 

Он воссоздает вашу таблицу из миграций.

Как предлагается в комментариях, более быстрый способ сделать это (но вам нужно добавить новую задачу с граблями):

namespace :db do
  desc "Truncate all tables"
  task :truncate => :environment do
    conn = ActiveRecord::Base.connection
    tables = conn.execute("show tables").map { |r| r[0] }
    tables.delete "schema_migrations"
    tables.each { |t| conn.execute("TRUNCATE #{t}") }
  end
end

Ответ скопирован from: ответ на SO .

83
ответ дан 24 November 2019 в 16:33
поделиться

В направляющих 6, можно сделать rails db:truncate_all для удаления всех данных, не отбрасывая таблиц.

, Если требуется отобрать дб после этого, Вы могли бы также сделать rails db:seed:replant для усечения всех данных и базы данных семени

2
ответ дан 24 November 2019 в 16:33
поделиться

Если вы пытаетесь сделать это из кода, а не из командной строки, скажем, с помощью метода Test :: Unit :: TestCase # teardown , вы можете сделать либо

class MyTest < Test::Unit::TestCase

  def teardown
    ActiveRecord::Base.subclasses.each(&:delete_all)
  end

end

или

class MyTest < Test::Unit::TestCase

  def teardown
    Rake::Task['db:reset'].invoke
  end

end

Я предупреждаю вас: ни один из них не особенно быстр. Вам определенно будет лучше с транзакционными тестами, если сможете.

24
ответ дан 24 November 2019 в 16:33
поделиться

Вы можете получить более точное управление с помощью:

rake db:drop:all

Затем создайте базу данных, не выполняя миграции,

rake db:create:all

Затем выполните все миграции,

rake db:migrate 

Вы также можете:

mysqladmin drop databasename
28
ответ дан 24 November 2019 в 16:33
поделиться

Если вы просто хотите начать с чистого листа со свежим набором пустых таблиц, вы можете сначала убедиться, что у вас есть актуальное определение схемы в db/schema.rb:

rake db:schema:dump

и затем:

rake db:schema:load

что дает эффект удаления таблиц и их повторного создания, без выполнения всей вашей батареи миграций.

17
ответ дан 24 November 2019 в 16:33
поделиться

Я знаю, что это старый вопрос, но я подумал, что это может быть кому-то полезно. Это очень быстрый способ очистки всех данных из базы данных.

tables = []
ActiveRecord::Base.connection.execute("show tables").each { |r| tables << r[0] }
tables = tables - ["schema_migrations"]
tables.each do |table|
  ActiveRecord::Base.connection.execute("DELETE FROM #{table} WHERE 1 = 1")
end

Я использую эту технику в некоторых спецификациях в блоке after (: all) . Это намного быстрее и эффективнее, чем любая из задач Rails по очистке, миграции и сбросу базы данных.

Кстати: я почти уверен, что это, скорее всего, не удастся, если бы вы применяли ограничения внешнего ключа на стороне базы данных.

2
ответ дан 24 November 2019 в 16:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: