Видалення моделі в рейках (зворотній бік "рейки g Назва заголовка ...")


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

Як я можу повністю зняти цю модель? Дякую


5
Найвища відповідь Михайла нижче стосується моделі, створеної в останній міграції. Для тих, хто хоче видалити модель та її таблицю, які вже деякий час існують, ця нитка описує, що саме потрібно робити.
Ninjakannon

Відповіді:


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

Коли ви генеруєте модель, вона створює міграцію бази даних. Якщо ви запустите "знищити" на цій моделі, він видалить файл міграції, але не таблицю бази даних. Тож перед бігом

bundle exec rake db:rollback

:( Прочитайте перший рядок і зробили це. Я був з моєї вини, але правильно впорядкована відповідь могла допомогти.
Майк Т

4
якщо це розвиток, і ви не боїтеся втратити свої дані, ви можете запустити bundle exec rake db:drop db:create db:migrate. Це буде нова порожня база даних.
Михайло Нікалюкін

Дякую Я відновив міграцію з кошика, але виявилося, що у мене була ще одна міграція, яка пропала, тому я буду робити те, що ви пропонуєте
Майк Т

6
@MikeT Ти що? Відновлено міграцію з кошика? Ви не використовуєте жоден ДКС? o_O Ви абсолютно повинні!
плунговий ям

Працював для мене, але мені також довелося зайти в route.rb та видалити "devise_for: MODEL"
cormacncheese

54

Спробуйте це

rails destroy model Rating

Це видалить модель, міграцію, тести та світильники


5
Це видаляє все, але це не створює міграцію заниження чи щось таке.
mr.The

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.
Комсун К.

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 генерують міграцію DropEpisodes І тоді я також би використовував код видалення моделі нижче.
Андрій Шподе
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.