Menghapus model di rel (kebalikan dari "Rails g model Title…")

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

Bagaimana cara menghapus model ini sepenuhnya? Terima kasih

Colbern
sumber
5
Jawaban teratas Mikhail di bawah ini berlaku untuk model yang dibuat pada migrasi terakhir. Mereka yang ingin menghapus model dan tabelnya yang telah ada selama beberapa waktu, utas ini menjelaskan dengan tepat apa yang harus dilakukan.
Ninjakannon

Jawaban:

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

Saat Anda membuat model, itu membuat migrasi database. Jika Anda menjalankan 'hancurkan' pada model itu, itu akan menghapus file migrasi, tetapi tidak tabel database. Jadi sebelum lari

bundle exec rake db:rollback
Mikhail Nikalyukin
sumber
:( Baca baris pertama dan lakukan. Itu salah saya, tetapi jawaban yang disusun dengan benar mungkin bisa membantu.
Mike T
4
jika itu pengembangan dan Anda tidak takut kehilangan data Anda, Anda dapat menjalankannya bundle exec rake db:drop db:create db:migrate. Ini akan menjadi database kosong baru.
Mikhail Nikalyukin
Terima kasih. Saya memulihkan migrasi dari Sampah tetapi ternyata saya juga memiliki migrasi yang hilang, jadi saya akan melakukan apa yang Anda sarankan
Mike T
6
@MikeT Anda apa? Pulihkan migrasi dari sampah? Anda tidak menggunakan VCS? o_O Anda benar-benar harus!
plunntic iam
Bekerja untuk saya, tetapi saya juga harus pergi ke routes.rb dan menghapus "devise_for: MODEL"
cormacncheese
54

Coba ini

rails destroy model Rating

Ini akan menghapus model, migrasi, tes dan perlengkapan

fl00r
sumber
5
Ini menghapus semua, tetapi tidak membuat migrasi downgrade atau sesuatu.
Tuan.
28

Untuk penanya selanjutnya: Jika Anda tidak dapat melepaskan tabel dari konsol, cobalah untuk membuat migrasi yang melepaskan tabel untuk Anda. Anda harus membuat migrasi dan kemudian di tabel catatan file yang ingin Anda jatuhkan seperti ini:

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

  def down
    raise ActiveRecord::IrreversibleMigration
  end
end
Jenny Lang
sumber
Jawaban yang bagus, akan berperilaku seperti yang diharapkan dengan penerapan capistrano.
LessQuesar
18
  1. Untuk menghapus migrasi (jika Anda sudah memigrasi migrasi)

    rake db:migrate:down VERSION="20130417185845" #Your migration version
  2. Untuk menghapus Model

    rails d model name  #name => Your model name
Govind shaw
sumber
rails d modeladalah apa yang saya cari untuk membalikkan saya rails g model.
Komsun K.
3

Berikut adalah implementasi berbeda dari jawaban Jenny Lang yang berfungsi untuk Rails 5.

Pertama buat file migrasi:

bundle exec be rails g migration DropEpisodes

Kemudian isi file migrasi sebagai berikut:

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

Berlari rails db:migrateakan menjatuhkan meja. Jika Anda lari rails db:rollback, Rails akan membuat ActiveRecord::IrreversibleMigrationkesalahan.

Powers
sumber
Ini adalah jawaban yang berguna - tetapi perintah itu tidak berhasil untuk saya. Saya menggunakan: bundle exec rails menghasilkan migrasi DropEpisodes Dan kemudian saya juga akan menggunakan kode penghapusan model di bawah ini juga.
Andrew Spode