Apa sintaksis untuk menjatuhkan kolom tabel database melalui migrasi Rails?
625
Apa sintaksis untuk menjatuhkan kolom tabel database melalui migrasi Rails?
remove_column :table_name, :column_name
Contohnya:
remove_column :users, :hobby
akan menghapus Kolom hobi dari tabel pengguna.
up
dandown
metode, tidakchange
, seperti yang dijelaskan dalam jawaban oleh @Power.remove_column :table_name, :column_name, :type, :options
dalamchange
metode ini, karena jika Anda menentukan jenis pengembalian migrasi mungkin. Dari dokumentasi: Thetype
danoptions
parameter akan diabaikan jika ada. Sangat membantu untuk menyediakan ini dalam metode migrasichange
sehingga dapat dikembalikan. Dalam hal ini,type
danoptions
akan digunakan oleh add_column.change
metode ini, tetapi hanya jika Anda menentukan jenis kolom. Misalnyaremove_column, :table_name, :column_name, :column_type
. Kalau tidak, Anda akan mendapatkan kesalahan berikut ketika mencoba menjalankan migrasi:remove_column is only reversible if given a type
Untuk versi Rails yang lebih lama
Untuk Rails 3 ke atas
sumber
rails g migration remove_field_name_from_table_name field_name:datatype
juga bekerjaAddXXXtoTTT
sebuahRemoveXXXFromTTT
dapat diikuti dengan daftar putih spasi dari filed_name: data_type, dan sesuai pernyataan add_column dan remove_column akan dibuat:rails g migration RemoveUnusefulFieldsFromUsers hair_color:string favorite_number:integer
menghilangkan dua atribut menggunakan migrasi tunggal. Perhatikan juga bahwaremove_column
tidak didukung olehchange
metode, jadi Anda harus menulis keduanyaup
dandown
.change
hal ini. Rollback berfungsi seperti seharusnya.change
metode yang dapat dikembalikan * Anda harus menginformasikan tipe data (dan semua pengubah bidang lainnya), jadi jika Anda mengembalikan migrasi itu, bidang dapat dibuat kembali dengan benar. * Ketika saya katakan dikembalikan, itu dalam hal struktur database, tentu saja, data dari kolom itu jelas akan hilang.Rails 4 telah diperbarui, sehingga metode perubahan dapat digunakan dalam migrasi untuk menjatuhkan kolom dan migrasi akan berhasil dikembalikan. Silakan baca peringatan berikut untuk aplikasi Rails 3:
Rails 3 Peringatan
Harap dicatat bahwa ketika Anda menggunakan perintah ini:
Migrasi yang dihasilkan akan terlihat seperti ini:
Pastikan untuk tidak menggunakan metode perubahan saat menghapus kolom dari tabel database (contoh apa yang tidak Anda inginkan dalam file migrasi di aplikasi Rails 3):
Metode perubahan di Rails 3 tidak cerdas ketika datang ke remove_column, jadi Anda tidak akan dapat mengembalikan migrasi ini.
sumber
change
metode ini, makarake db:rollback
perintah itu akan keluar.rake db:rollback
pada dasarnya kebalikan darirake db:migrate
. Bug ini diperbaiki di Rails 4 :)Dalam aplikasi rails4 dimungkinkan untuk menggunakan metode perubahan juga untuk menghapus kolom. Param ketiga adalah tipe data_type dan dalam opsional sebagainya Anda dapat memberikan opsi. Agak tersembunyi di bagian 'Transformasi yang tersedia' pada dokumentasi .
sumber
Ada dua cara yang baik untuk melakukan ini:
hapus_kolom
Anda cukup menggunakan remove_column, seperti:
Ini bagus jika Anda hanya perlu melakukan satu perubahan pada skema Anda.
blok change_table
Anda juga dapat melakukan ini menggunakan blok change_table, seperti:
Saya lebih suka ini karena saya merasa lebih terbaca, dan Anda dapat membuat beberapa perubahan sekaligus.
Inilah daftar lengkap metode change_table yang didukung:
http://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/change_table
sumber
di rails 5 Anda dapat menggunakan perintah ini di terminal:
misalnya untuk menghapus kolom access_level (string) dari pengguna tabel:
lalu jalankan:
sumber
Hasilkan migrasi untuk menghapus kolom sehingga jika dimigrasikan (
rake db:migrate
), harus drop kolom . Dan itu harus menambahkan kolom kembali jika migrasi ini dibatalkan (rake db:rollback
).Sintaksnya:
remove_column: table_name,: column_name,: type
Contoh:
Catatan : Jika Anda melewatkan data_type , migrasi akan menghapus kolom dengan sukses tetapi jika Anda mengembalikan migrasi itu akan menimbulkan kesalahan.
sumber
Instruksi Clear & Simple untuk Rails 5.2
1. Buat migrasi
Jalankan perintah berikut di terminal Anda:
rails generate migration remove_fieldname_from_tablename fieldname:fieldtype
Catatan: nama tabel harus dalam bentuk jamak sesuai konvensi rel.
Contoh:
Dalam kasus saya, saya ingin menghapus
accepted
kolom (nilai boolean) dariquotes
tabel:rails g migration RemoveAcceptedFromQuotes accepted:boolean
Lihat kembali dokumentasi : konvensi saat menambahkan / menghapus bidang ke tabel:
2. Periksa migrasi
3. Jalankan migrasi
rake db:migrate
.... Dan kemudian Anda pergi ke balapan!
sumber
rails db:migrate
Hapus Kolom Untuk Aplikasi RAILS 5
Perintah di atas menghasilkan file migrasi di dalam
db/migrate
direktori. Cuplikan potongan adalah salah satu kolom hapus dari tabel contoh yang dihasilkan oleh generator Rails,Saya juga membuat panduan referensi cepat untuk Rails yang dapat ditemukan di sini .
sumber
Anda dapat mencoba yang berikut ini:
( Dokumentasi resmi )
sumber
X = nama kolom
Y = nama tabel
EDIT
Berubah
RemoveXColumnToY
untukRemoveXColumnFromY
per komentar - menyediakan kejelasan lebih lanjut untuk apa yang benar-benar melakukan migrasi.sumber
Untuk menghapus kolom dari tabel Anda harus menjalankan migrasi berikut:
Kemudian jalankan perintah:
sumber
Berikan perintah di bawah ini yang akan ditambahkan dalam file migrasi sendiri
Setelah menjalankan perintah di atas, Anda dapat memeriksa file migrasi kode remove_column harus ditambahkan di sana sendiri
Kemudian migrasi db
sumber
remove_column
dalamchange
metode akan membantu Anda menghapus kolom dari tabel.Buka tautan ini untuk referensi lengkap: http://guides.rubyonrails.org/active_record_migrations.html
sumber
Untuk menghapus kolom dari tabel hanya dengan 3 langkah mudah sebagai berikut:
rails g migration remove_column_from_table_name
setelah menjalankan perintah ini di terminal satu file yang dibuat dengan nama dan cap waktu ini (remove_column from_table_name).
Lalu buka file ini.
di dalam file Anda harus menulis
remove_column :table_name, :column_name
Akhirnya pergi ke konsol dan kemudian lakukan
rake db:migrate
sumber
Inilah satu lagi dari konsol rel
ActiveRecord::Migration.remove_column(:table_name, :column_name)
sumber
Melalui
remove_column :table_name, :column_name
dalam file migrasi
Anda dapat menghapus kolom secara langsung di konsol rel dengan mengetik:
ActiveRecord::Base.remove_column :table_name, :column_name
sumber
Lakukan seperti ini;
rails g migration RemoveColumnNameFromTables column_name:type
Yaitu
rails g migration RemoveTitleFromPosts title:string
Bagaimanapun, Akan lebih baik untuk mempertimbangkan tentang downtime juga karena ActiveRecord cache kolom basis data saat runtime jadi jika Anda menjatuhkan kolom, itu dapat menyebabkan pengecualian sampai aplikasi Anda reboot.
Ref: Migrasi yang kuat
sumber
Cukup, Anda dapat menghapus kolom
Sebagai contoh,
sumber
pertama-tama cobalah membuat file migrasi yang menjalankan perintah:
dan kemudian pada direktori root proyek jalankan migrasi menjalankan perintah:
sumber