Jawaban:
remove_column :table_name, :column_name
Contohnya:
remove_column :users, :hobby
akan menghapus Kolom hobi dari tabel pengguna.
remove_column :table_name, :column_name, :type, :options
dalam change
metode ini, karena jika Anda menentukan jenis pengembalian migrasi mungkin. Dari dokumentasi: The type
dan options
parameter akan diabaikan jika ada. Sangat membantu untuk menyediakan ini dalam metode migrasi change
sehingga dapat dikembalikan. Dalam hal ini, type
dan options
akan digunakan oleh add_column.
change
metode ini, tetapi hanya jika Anda menentukan jenis kolom. Misalnya remove_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
ruby script/generate migration RemoveFieldNameFromTableName field_name:datatype
Untuk Rails 3 ke atas
rails generate migration RemoveFieldNameFromTableName field_name:datatype
rails g migration remove_field_name_from_table_name field_name:datatype
juga bekerja
AddXXXtoTTT
sebuah RemoveXXXFromTTT
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 bahwa remove_column
tidak didukung oleh change
metode, jadi Anda harus menulis keduanya up
dan down
.
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:
rails generate migration RemoveFieldNameFromTableName field_name:datatype
Migrasi yang dihasilkan akan terlihat seperti ini:
def up
remove_column :table_name, :field_name
end
def down
add_column :table_name, :field_name, :datatype
end
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):
def change
remove_column :table_name, :field_name
end
Metode perubahan di Rails 3 tidak cerdas ketika datang ke remove_column, jadi Anda tidak akan dapat mengembalikan migrasi ini.
change
metode ini, maka rake db:rollback
perintah itu akan keluar. rake db:rollback
pada dasarnya kebalikan dari rake 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 .
class RemoveFieldFromTableName < ActiveRecord::Migration
def change
remove_column :table_name, :field_name, :data_type, {}
end
end
Ada dua cara yang baik untuk melakukan ini:
Anda cukup menggunakan remove_column, seperti:
remove_column :users, :first_name
Ini bagus jika Anda hanya perlu melakukan satu perubahan pada skema Anda.
Anda juga dapat melakukan ini menggunakan blok change_table, seperti:
change_table :users do |t|
t.remove :first_name
end
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
di rails 5 Anda dapat menggunakan perintah ini di terminal:
rails generate migration remove_COLUMNNAME_from_TABLENAME COLUMNNAME:DATATYPE
misalnya untuk menghapus kolom access_level (string) dari pengguna tabel:
rails generate migration remove_access_level_from_users access_level:string
lalu jalankan:
rake db:migrate
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
Menghapus kolom, juga menambahkan kolom kembali jika migrasi dibatalkan.
Contoh:
remove_column :users, :last_name, :string
Catatan : Jika Anda melewatkan data_type , migrasi akan menghapus kolom dengan sukses tetapi jika Anda mengembalikan migrasi itu akan menimbulkan kesalahan.
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) dari quotes
tabel:
rails g migration RemoveAcceptedFromQuotes accepted:boolean
Lihat kembali dokumentasi : konvensi saat menambahkan / menghapus bidang ke tabel:
Ada pintasan sintaksis khusus untuk menghasilkan migrasi yang menambahkan bidang ke tabel.
rails menghasilkan migrasi add_fieldname_to_tablename fieldname: fieldtype
# db/migrate/20190122035000_remove_accepted_from_quotes.rb
class RemoveAcceptedFromQuotes < ActiveRecord::Migration[5.2]
# with rails 5.2 you don't need to add a separate "up" and "down" method.
def change
remove_column :quotes, :accepted, :boolean
end
end
rake db:migrate
.... Dan kemudian Anda pergi ke balapan!
rails db:migrate
Hapus Kolom Untuk Aplikasi RAILS 5
rails g migration Remove<Anything>From<TableName> [columnName:type]
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,
class RemoveAgeFromUsers < ActiveRecord::Migration
def up
remove_column :users, :age
end
def down
add_column :users, :age, :integer
end
end
Saya juga membuat panduan referensi cepat untuk Rails yang dapat ditemukan di sini .
rails g migration RemoveXColumnFromY column_name:data_type
X = nama kolom
Y = nama tabel
EDIT
Berubah RemoveXColumnToY
untuk RemoveXColumnFromY
per komentar - menyediakan kejelasan lebih lanjut untuk apa yang benar-benar melakukan migrasi.
remove_column
dalam change
metode akan membantu Anda menghapus kolom dari tabel.
class RemoveColumn < ActiveRecord::Migration
def change
remove_column :table_name, :column_name, :data_type
end
end
Buka tautan ini untuk referensi lengkap: http://guides.rubyonrails.org/active_record_migrations.html
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
Inilah satu lagi dari konsol rel
ActiveRecord::Migration.remove_column(:table_name, :column_name)
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
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
Cukup, Anda dapat menghapus kolom
remove_column :table_name, :column_name
Sebagai contoh,
remove_column :posts, :comment
up
dandown
metode, tidakchange
, seperti yang dijelaskan dalam jawaban oleh @Power.