Saya menambahkan tabel yang saya pikir akan saya butuhkan, tetapi sekarang tidak lagi berencana menggunakannya. Bagaimana saya harus menghapus tabel itu?
Saya sudah menjalankan migrasi, jadi tabelnya ada di database saya. Kurasa aku rails generate migration
seharusnya bisa menangani ini, tapi aku belum tahu caranya.
Saya sudah mencoba:
rails generate migration drop_tablename
tapi itu baru saja menghasilkan migrasi kosong.
Apa cara "resmi" untuk menjatuhkan meja di Rails?
ruby-on-rails
database
ruby-on-rails-3
migration
rake
Jason Whitehorn
sumber
sumber
rails generate migration
memiliki opsi baris perintah untuk membuat kode migrasi untuk membuat tabel, menambahkan atau mengubah kolom, dll., Akan lebih baik jika juga memiliki opsi untuk menjatuhkan tabel - tetapi tidak. Tentu, menulisup
bagian itu sederhana - panggil sajadrop_table
- tetapidown
bagian itu, menghasilkan tabel lagi, mungkin tidak selalu begitu sederhana, terutama jika skema tabel yang dimaksud telah diubah oleh migrasi setelah penciptaan awal. Mungkin seseorang harus menyarankan kepada pengembang Rails bahwa menambahkan opsi seperti itu akan menjadi ide yang bagus.rake
perintah pembuatan migrasi, dengan nama tabel sebagai parameter, yang akan menghasilkan fungsiup
dan kebutuhandown
.Jawaban:
Anda tidak akan selalu dapat hanya menghasilkan migrasi untuk sudah memiliki kode yang Anda inginkan. Anda dapat membuat migrasi kosong dan mengisinya dengan kode yang Anda butuhkan.
Anda dapat menemukan informasi tentang cara menyelesaikan berbagai tugas dalam migrasi di sini:
http://api.rubyonrails.org/classes/ActiveRecord/Migration.html
Lebih khusus, Anda dapat melihat cara menjatuhkan tabel menggunakan pendekatan berikut:
sumber
Pertama-tama hasilkan migrasi kosong dengan nama apa pun yang Anda inginkan. Sangat penting untuk melakukannya dengan cara ini karena itu menciptakan tanggal yang sesuai.
Ini akan menghasilkan file .rb di / db / migrate / seperti 20111015185025_drop_products_table.rb
Sekarang edit file itu agar terlihat seperti ini:
Satu-satunya hal yang saya tambahkan adalah
drop_table :products
danraise ActiveRecord::IrreversibleMigration
.Kemudian jalankan
rake db:migrate
dan itu akan menjatuhkan meja untuk Anda.sumber
down
metode, Anda tidak akan memulihkannya sehingga itu sebenarnya tidak benar-benar memutar kembali. Lebih baik menunjukkan dengan jelas bahwa migrasi tidak dapat diubah daripada memberikan pengertian yang salah bahwa migrasi dapat dipulihkan.Tulis migrasi Anda secara manual. Misal lari
rails g migration DropUsers
.Sedangkan untuk kode migrasi saya hanya akan mengutip daftar periksa Rails Migration posting Maxwell Holder
BURUK - berjalan
rake db:migrate
dan kemudianrake db:rollback
akan gagalBAIK - mengungkapkan maksud bahwa migrasi tidak boleh dibalik
LEBIH BAIK - sebenarnya bisa dibalik
sumber
schema.rb
, jangan lupa juga mencarischema.rb
kunci asing. Kemudian tambahkan definisi kunci asing kedrop_table
blok, misalnya:t.foreign_key "other_table"
Sementara jawaban yang diberikan di sini berfungsi dengan baik, saya menginginkan sesuatu yang lebih 'langsung', saya menemukannya di sini: tautan Pertama masuk ke konsol rel:
Kemudian ketikkan:
Dan selesai, bekerja untuk saya!
sumber
rails destroy model User
Anda perlu membuat file migrasi baru menggunakan perintah berikut
dan tulis kode drop_table di file migrasi yang baru dibuat (db / migrasi / xxxxxxx_drop_table_xyz) seperti
Atau jika Anda ingin menjatuhkan tabel tanpa migrasi, cukup buka rel dengan
dan jalankan perintah berikut
atau Anda dapat menggunakan perintah yang lebih sederhana
sumber
sumber
Saya pikir, untuk sepenuhnya "resmi", Anda harus membuat migrasi baru, dan meletakkan drop_table di self.up. Metode self.down kemudian harus berisi semua kode untuk membuat ulang tabel secara penuh. Agaknya kode itu hanya bisa diambil dari schema.rb pada saat Anda membuat migrasi.
Tampaknya sedikit aneh, memasukkan kode untuk membuat tabel yang Anda tahu tidak akan Anda perlukan lagi, tetapi itu akan membuat semua kode migrasi lengkap dan "resmi", bukan?
Saya hanya melakukan ini untuk meja saya harus turun, tapi jujur tidak menguji "turun" dan tidak yakin mengapa saya melakukannya.
sumber
raise ActiveRecord::IrreversibleMigration
dalam metode self.down, sehingga Anda di LEAST memberi kesalahan / pemberitahuan kepada diri sendiri jika Anda pernah mencoba untuk mengembalikan.CreateMyTable.up
dan diActiveRecord::Migrator.run(:up, ActiveRecord::Migrator.migrations_paths, X)
mana X adalah migrasi yang awalnya membuat tabel, tetapi tidak berhasil - dalam kedua pendekatan, AR pertama memeriksa apakah migrasi sudah diterapkan, dan diam-diam melewatkannya jika sudah. `Anda cukup menjatuhkan meja dari konsol rel. pertama buka konsol
lalu tempel perintah ini di konsol
ganti table_name dengan tabel yang ingin Anda hapus.
Anda juga dapat menjatuhkan tabel langsung dari terminal. cukup masukkan di direktori root aplikasi Anda dan jalankan perintah ini
sumber
Cara yang sederhana dan resmi adalah:
Sekarang pergi ke db / bermigrasi Anda dan cari file Anda yang berisi drop_tablename sebagai nama file dan edit untuk ini.
Maka Anda harus lari
di konsol Anda.
sumber
Anda dapat mengembalikan migrasi seperti yang ada dalam panduan:
http://guides.rubyonrails.org/active_record_migrations.html#reverting-previous-migrations
Hasilkan migrasi:
Tulis migrasi:
Dengan cara ini Anda juga dapat mengembalikan dan dapat digunakan untuk mengembalikan migrasi apa pun
sumber
Alternatif untuk meningkatkan pengecualian atau mencoba untuk membuat ulang tabel yang sekarang kosong - sambil tetap mengaktifkan rollback migrasi, ulang, dll -
sumber
Saya tidak dapat membuatnya bekerja dengan skrip migrasi jadi saya melanjutkan dengan solusi ini. Masuk ke konsol rel menggunakan terminal:
Tipe
Ini bekerja dengan baik untuk saya. Ini akan menghapus tabel sebelumnya. Jangan lupa lari
sumber
Buka konsol rel Anda
sumber
ActiveRecord::Base.connection.drop_table :table_name
sumber
Saya perlu menghapus skrip migrasi kami bersama dengan tabel itu sendiri ...
dari terminal window run:
atau
sumber
cara terbaik yang dapat Anda lakukan adalah
kemudian lakukan hal berikut
sumber
Lari
Di mana
<version>
nomor versi file migrasi Anda ingin dikembalikan.Contoh:-
sumber
kalau ada yang mencari cara melakukannya di SQL.
ketik
rails dbconsole
dari terminalMasukkan kata kunci
Di konsol lakukan
USE db_name;
DROP TABLE table_name;
exit
Tolong jangan lupa untuk menghapus file migrasi dan struktur tabel dari skema
sumber
rails db
jika Anda ingin menjatuhkan tabel tertentu yang dapat Anda lakukan
jika tidak, jika Anda ingin menghapus semua basis data yang dapat Anda lakukan
sumber
Drop Table / Migrasi
jalankan: - $ rails menghasilkan DropTablename migrasi
exp: - $ rails menghasilkan DropProducts migrasi
sumber
Jalankan perintah ini: -
kemudian:
atau jika Anda menggunakan basis data MySql maka:
show databases;
show tables;
drop table_name;
sumber
Jika Anda ingin menghapus tabel dari skema melakukan operasi di bawah ini -
sumber