Как удалить таблицу из базы данных навсегда в ROR - PullRequest
0 голосов
/ 31 августа 2018

Я создал скаффолд и затем перенес свою базу данных После этого я уничтожил свои леса, а затем снова сгенерировал леса и попытался перенести базу данных, но я получил ошибку, что эта таблица уже существует. Как я могу удалить эту таблицу из базы данных?

Ответы [ 4 ]

0 голосов
/ 31 августа 2018

Rails автоматически генерирует миграцию, благодаря генератору командной строки. Например, если вы хотите удалить таблицу пользователей, напишите оператор командной строки следующим образом:

rails generate migration DropUsersTable

При этом будет создан пустой файл .rb в / db / migrate /, который еще нужно заполнить, чтобы в этом случае удалить таблицу «Пользователи».

Реализация Quick-and-Dirty ™ будет выглядеть следующим образом:

class DropUsersTable < ActiveRecord::Migration
  def up
    drop_table :users
  end
  def down
    raise ActiveRecord::IrreversibleMigration
  end
end

Это «правильно», поскольку показывает, что миграция носит односторонний характер и не может / не может быть отменена. Но чтобы сделать действительно чистую работу в случае, если эти изменения должны были быть отменены, мы должны иметь симметричную миграцию (при условии, что мы можем восстановить потерянные данные), что мы можем сделать, объявив все поля нашей таблицы в файле миграции :

class Dropusers < ActiveRecord::Migration
  def change
    drop_table :users do |t|
      t.string :name, null: false
      t.timestamps null: false
    end
  end
end

Это может быть долго, если модель сложная, но она обеспечивает полную обратимость. Здесь снова изменения вступят в силу как обычно после выполнения rake db:migrate.

0 голосов
/ 31 августа 2018

Еще один простой способ сделать это:

откройте консоль rails и используйте эту команду: ActiveRecord::Migration.drop_table(:your_table_name)

0 голосов
/ 31 августа 2018

Если вы не нажали свой код, то решение, данное @Cryptex Technologies, работает нормально. Но если у вас есть (то есть, если вы используете контроль версий), то я не буду рекомендовать такой подход. В этом случае вы должны создать новую миграцию примерно так:

class RemoveTable < ActiveRecord::Migration[5.2]
  def up
    drop_table :table_name
  end

  def down
    create_table :table_name do |t|
      t.string :field_name_1
      t.text :field_name_2
      t.timestamps
    end

    add_index :table_name, :field_name_1, unique: true
  end
end
0 голосов
/ 31 августа 2018

Чтобы удалить эту таблицу, вам нужно выполнить команду

rake db:rollback 

и если вы хотите удалить базу данных вашего текущего приложения. тогда вам нужно запустить команду

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