Миграция БД Rails - Как удалить таблицу? - PullRequest
470 голосов
/ 26 октября 2010

Я добавил таблицу, которая, как мне казалось, мне понадобится, но теперь я больше не планирую ее использовать.Как мне удалить эту таблицу?

Я уже выполнил миграцию, поэтому таблица находится в моей базе данных.Я полагаю, что rails generate migration должен справиться с этим, но я еще не понял, как это сделать.

Я пытался:

rails generate migration drop_tablename

, но это только привело к пустой миграции.

Каков "официальный" способ удаления таблицы в Rails?

Ответы [ 21 ]

7 голосов
/ 14 декабря 2012

открой вам рельсы консоль

ActiveRecord::Base.connection.execute("drop table table_name")
5 голосов
/ 20 ноября 2017

Альтернатива возбуждению исключения или попытке воссоздать пустую таблицу - при этом разрешается откат миграции, повтор и т. Д. -

def change
  drop_table(:users, force: true) if ActiveRecord::Base.connection.tables.include?('users')
end
4 голосов
/ 09 сентября 2014

ActiveRecord::Base.connection.drop_table :table_name

3 голосов
/ 11 декабря 2018

Мне не удалось заставить его работать со сценарием миграции, поэтому я решил использовать это решение.Войдите в консоль рельсов, используя терминал:

rails c

Тип

ActiveRecord::Migration.drop_table(:tablename)

Это хорошо работает для меня.Это удалит предыдущую таблицу.Не забудьте запустить

rails db:migrate
2 голосов
/ 14 февраля 2013

Мне нужно было удалить наши скрипты миграции вместе с самими таблицами ...

class Util::Table < ActiveRecord::Migration

 def self.clobber(table_name)   
    # drop the table
    if ActiveRecord::Base.connection.table_exists? table_name
      puts "\n== " + table_name.upcase.cyan + " ! " 
           << Time.now.strftime("%H:%M:%S").yellow
      drop_table table_name 
    end

    # locate any existing migrations for a table and delete them
    base_folder = File.join(Rails.root.to_s, 'db', 'migrate')
    Dir[File.join(base_folder, '**', '*.rb')].each do |file|
      if file =~ /create_#{table_name}.rb/
        puts "== deleting migration: " + file.cyan + " ! "
             << Time.now.strftime("%H:%M:%S").yellow
        FileUtils.rm_rf(file)
        break
      end
    end
  end

  def self.clobber_all
    # delete every table in the db, along with every corresponding migration 
    ActiveRecord::Base.connection.tables.each {|t| clobber t}
  end

end

из запуска окна терминала:

$ rails runner "Util::Table.clobber 'your_table_name'"

или

$ rails runner "Util::Table.clobber_all"
1 голос
/ 17 июня 2016

Запустите эту команду: -

rails g migration drop_table_name

затем:

rake db:migrate

или если вы используете базу данных MySql, то:

  1. вход в систему с базой данных
  2. show databases;
  3. show tables;
  4. drop table_name;
1 голос
/ 14 сентября 2015

лучший способ сделать это -

rails g migration Drop_table_Users

, затем сделать следующее

rake db:migrate
1 голос
/ 03 августа 2015

Выполнить

rake db:migrate:down VERSION=<version>

Где <version> - номер версии файла миграции, который вы хотите восстановить.

Пример: -

rake db:migrate:down VERSION=3846656238
0 голосов
/ 20 апреля 2018

Drop Table / Migration

run: - $ rails генерирует миграцию DropTablename

exp: - $ rails генерирует миграцию DropProducts

0 голосов
/ 04 марта 2019

Если вы хотите удалить таблицу из схемы, выполните следующую операцию -

rails db:rollback
...