Я добавил таблицу, которая, как мне казалось, мне понадобится, но теперь я больше не планирую ее использовать. Как мне удалить эту таблицу?
Я уже запустил миграцию, поэтому таблица находится в моей базе данных. Я полагаю, что rails generate migration
должен справиться с этим, но я еще не понял, как это сделать.
Я пробовал:
rails generate migration drop_tablename
но это только породило пустую миграцию.
Каков «официальный» способ удаления таблицы в Rails?
ruby-on-rails
database
ruby-on-rails-3
migration
rake
Джейсон Уайтхорн
источник
источник
rails generate migration
командной строке есть параметры для генерации кода миграции для создания таблиц, добавления или изменения столбцов и т. Д., Было бы неплохо, если бы у него также была возможность удаления таблицы, но это не так. Конечно, написаниеup
части простое - просто вызовdrop_table
- ноdown
часть, генерирующая таблицу снова, не всегда может быть такой простой, особенно если схема рассматриваемой таблицы была изменена миграциями после ее первоначального создания. Может быть, кто-то должен предложить разработчикам Rails, что добавление такой опции было бы хорошей идеей.rake
команду создания миграции с именем таблицы в качестве параметра, которая выдаст необходимые функцииup
иdown
функции.Ответы:
Вы не всегда сможете просто сгенерировать миграцию, чтобы уже иметь нужный код. Вы можете создать пустую миграцию, а затем заполнить ее нужным кодом.
Вы можете найти информацию о том, как выполнить различные задачи в миграции здесь:
http://api.rubyonrails.org/classes/ActiveRecord/Migration.html
Более конкретно, вы можете увидеть, как удалить таблицу, используя следующий подход:
источник
Сначала создайте пустую миграцию с любым именем, которое хотите. Это важно сделать так, потому что это создает соответствующую дату.
Это создаст файл .rb в / db / migrate / like 20111015185025_drop_products_table.rb
Теперь отредактируйте этот файл так:
Единственное, что я добавил, было
drop_table :products
иraise ActiveRecord::IrreversibleMigration
.Тогда беги,
rake db:migrate
и он уронит тебе стол.источник
down
методе, вы не будете восстанавливать их, поэтому это не будет правильным откатом. Лучше четко указать, что миграция необратима, чем дать ложное представление о том, что ее можно восстановить.Напишите вашу миграцию вручную. Например, беги
rails g migration DropUsers
.Что касается кода миграции, я просто процитирую пост Максвелла Холдера Rails Migration Checklist
ПЛОХО - работает,
rake db:migrate
а затемrake db:rollback
не получитсяХОРОШО - показывает намерение, что миграция не должна быть обратимой
ЛУЧШЕ - на самом деле обратимо
источник
schema.rb
, не забудьте также искатьschema.rb
внешние ключи. Затем добавьте определение внешнего ключа вdrop_table
блок, например:t.foreign_key "other_table"
Хотя ответы, представленные здесь, работают правильно, я хотел что-то более «простое», но нашел это здесь: ссылка Сначала введите консоль rails:
Затем просто введите:
И сделано, работал для меня!
источник
rails destroy model User
Вам необходимо создать новый файл миграции, используя следующую команду
и напишите код drop_table во вновь созданном файле миграции (db /igration / xxxxxxx_drop_table_xyz), например
Или, если вы хотите удалить таблицу без миграции, просто откройте консоль rails
и выполните следующую команду
или вы можете использовать более упрощенную команду
источник
источник
Я думаю, чтобы быть полностью «официальным», вам нужно создать новую миграцию и поместить drop_table в self.up. Затем метод self.down должен содержать весь код для полного воссоздания таблицы. Предположительно, этот код можно было просто взять из schema.rb во время создания миграции.
Кажется немного странным, вставлять код для создания таблицы, которая, как вы знаете, вам больше не понадобится, но при этом весь код миграции будет полным и «официальным», верно?
Я просто сделал это для стола, который мне нужно было уронить, но, честно говоря, не проверял «вниз» и не знал, почему я это сделаю.
источник
raise ActiveRecord::IrreversibleMigration
в методе self.down, чтобы вы в LEAST выдавали ошибку / уведомление, если вы когда-нибудь попытаетесь откатиться.CreateMyTable.up
иActiveRecord::Migrator.run(:up, ActiveRecord::Migrator.migrations_paths, X)
где X - это миграция, которая первоначально создала таблицу, но ни один из них не работает - в обоих подходах AR сначала проверяет, была ли миграция уже применена, и молча пропускает ее, если она есть. `Вы можете просто уронить стол с консоли рельсов. сначала откройте консоль
затем вставьте эту команду в консоль
замените table_name на таблицу, которую вы хотите удалить.
Вы также можете удалить таблицу прямо из терминала. просто введите в корневой каталог вашего приложения и выполните эту команду
источник
Простой и официальный способ будет следующим:
Теперь перейдите к вашей db / migrate и найдите свой файл, который содержит имя_папки в качестве имени файла, и отредактируйте его так.
Тогда вам нужно бежать
на вашей консоли.
источник
Вы можете откатить миграцию так, как она есть в руководстве:
http://guides.rubyonrails.org/active_record_migrations.html#reverting-previous-migrations
Генерация миграции:
Напишите миграцию:
Таким образом, вы также можете откатить и использовать, чтобы отменить любую миграцию
источник
Альтернатива повышению исключений или попытке воссоздать пустую таблицу - при этом разрешая откат миграции, повтор и т. Д. -
источник
Я не смог заставить его работать со сценарием миграции, поэтому я выбрал это решение. Войдите в консоль рельсов, используя терминал:
Тип
Это хорошо работает для меня. Это удалит предыдущую таблицу. Не забудь бежать
источник
Откройте консоль
источник
ActiveRecord::Base.connection.drop_table :table_name
источник
Мне нужно было удалить наши сценарии миграции вместе с самими таблицами ...
из окна терминала запустить:
или
источник
лучший способ сделать это
затем сделайте следующее
источник
Запустить
куда
<version>
номер версии вашего файла миграции, который вы хотите вернуть.Пример:-
источник
если кто-то ищет, как это сделать в SQL.
тип
rails dbconsole
с терминалавведите пароль
В консоли сделать
USE db_name;
DROP TABLE table_name;
exit
Пожалуйста, не забудьте удалить файл миграции и структуру таблицы из схемы
источник
rails db
если вы хотите удалить конкретную таблицу, вы можете сделать
в противном случае, если вы хотите удалить всю свою базу данных, вы можете сделать
источник
Drop Table / Migration
run: - $ rails генерирует миграцию DropTablename
exp: - $ rails генерирует миграцию DropProducts
источник
Запустите эту команду: -
тогда:
или если вы используете базу данных MySql, то:
show databases;
show tables;
drop table_name;
источник
Если вы хотите удалить таблицу из схемы, выполните следующие действия:
источник