Удаление модели из рельсов (обратная сторона «Название модели рельсов g…»)

115
rails g model Rating user_id:integer message:string value:integer

Как можно полностью удалить эту модель? Спасибо

Colbern
источник
5
Главный ответ Михаила ниже относится к модели, созданной при последней миграции. Тем, кто хочет удалить модель и ее таблицу, которые существуют какое-то время, эта ветка точно описывает, что делать.
Ninjakannon

Ответы:

192
bundle exec rake db:rollback    
rails destroy model <model_name>

Когда вы генерируете модель, создается миграция базы данных. Если вы выполните команду «destroy» для этой модели, она удалит файл миграции, но не таблицу базы данных. Итак, перед запуском

bundle exec rake db:rollback
Михаил Никалюкин
источник
:( Прочитал первую строчку и сделал это. Это была моя вина, но правильно упорядоченный ответ мог помочь.
Майк Т
4
если это разработка, и вы не боитесь потерять свои данные, вы можете запустить bundle exec rake db:drop db:create db:migrate. Это будет новая пустая база данных.
Михаил Никалюкин
Спасибо. Я восстановил миграцию из корзины, но оказалось, что у меня тоже отсутствовала другая миграция, поэтому я сделаю то, что вы предлагаете
Mike T
6
@MikeT Ты что? Восстановили миграцию из хлама? Вы не используете VCS? о_О Обязательно!
plunntic iam
У меня сработало, но мне также пришлось зайти в routes.rb и удалить "devise_for: MODEL"
cormacncheese
54

Попробуй это

rails destroy model Rating

Он удалит модель, миграцию, тесты и приспособления.

fl00r
источник
5
Он удаляет все, но не создает миграцию на более раннюю версию или что-то в этом роде.
мистер
28

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

class DropTables < ActiveRecord::Migration
  def up
    drop_table :table_you_dont_want
  end

  def down
    raise ActiveRecord::IrreversibleMigration
  end
end
Дженни Лэнг
источник
Отличный ответ, будет вести себя так, как ожидалось, с развертыванием капистрано.
LessQuesar
18
  1. Чтобы удалить миграцию (если вы уже перенесли миграцию)

    rake db:migrate:down VERSION="20130417185845" #Your migration version
  2. Чтобы удалить модель

    rails d model name  #name => Your model name
Говинд Шоу
источник
rails d modelэто то, что я ищу, чтобы отменить мой rails g model.
Комсун К. 03
3

Вот другая реализация ответа Дженни Ланг, которая работает для Rails 5.

Сначала создайте файл миграции:

bundle exec be rails g migration DropEpisodes

Затем заполните файл миграции следующим образом:

class DropEpisodes < ActiveRecord::Migration[5.1]
  def change
    drop_table :episodes
  end
end

При беге rails db:migrateстол упадет. Если вы запустите rails db:rollback, Rails выдаст ActiveRecord::IrreversibleMigrationошибку.

полномочия
источник
Это полезный ответ, но эта команда у меня не работает. Я использовал: bundle exec rails generate migration DropEpisodes И затем я также использовал бы приведенный ниже код удаления модели.
Эндрю Спод,