Kami memiliki script/generate migration add_fieldname_to_tablename fieldname:datatype
sintaks untuk menambahkan kolom baru ke model.
Pada baris yang sama, apakah kita memiliki skrip / hasil untuk mengubah tipe data kolom? Atau haruskah saya menulis SQL langsung ke migrasi vanilla saya?
Saya ingin mengubah kolom dari datetime
menjadi date
.
ruby-on-rails
migration
papdel
sumber
sumber
change
tindakan yang biasa dengan tindakan terpisahup
dandown
tindakan, sepertichange_column
migrasi yang tidak dapat dipulihkan dan akan meningkatkan kesalahan jika Anda harus mundur.Anda juga dapat menggunakan blok jika Anda memiliki beberapa kolom untuk berubah dalam tabel.
Contoh:
Lihat dokumentasi API pada kelas Tabel untuk detail lebih lanjut.
sumber
Saya tidak tahu apakah Anda dapat membuat migrasi dari baris perintah untuk melakukan semua ini, tetapi Anda dapat membuat migrasi baru, lalu mengedit migrasi untuk melakukan pengambilan ini.
Jika tablename adalah nama tabel Anda, fieldname adalah nama bidang Anda dan Anda ingin mengubah dari waktu ke tanggal, Anda dapat menulis migrasi untuk melakukan ini.
Anda dapat membuat migrasi baru dengan:
Kemudian edit migrasi untuk menggunakan change_table:
Kemudian jalankan migrasi:
sumber
Seperti yang saya temukan pada jawaban sebelumnya, tiga langkah diperlukan untuk mengubah jenis kolom:
Langkah 1:
Hasilkan file migrasi baru menggunakan kode ini:
Langkah 2:
Buka
/db/migrate
folder dan edit file migrasi yang Anda buat. Ada dua solusi berbeda.2.
Langkah 3:
Jangan lupa untuk melakukan perintah ini:
Saya telah menguji solusi ini untuk Rails 4 dan berfungsi dengan baik.
sumber
Dengan Rails 5
Dari Rails Guides :
sumber
Cukup hasilkan migrasi:
Perbarui migrasi seperti ini:
dan akhirnya
sumber
Cara lain untuk mengubah tipe data menggunakan migrasi
langkah1: Anda harus menghapus nama bidang tipe data yang salah menggunakan migrasi
ex:
Di sini jangan lupa untuk menentukan tipe data untuk bidang Anda
Langkah 2: Sekarang Anda bisa menambahkan bidang dengan tipe data yang benar
ex:
Itu saja, sekarang meja Anda akan ditambahkan dengan bidang tipe data yang benar, Selamat ruby coding !!
sumber
Ini semua dengan asumsi bahwa tipe data kolom memiliki konversi implisit untuk setiap data yang ada. Saya telah mengalami beberapa situasi di mana data yang ada, katakanlah a
String
dapat secara implisit dikonversi menjadi tipe data baru, katakanlahDate
.Dalam situasi ini, perlu diketahui bahwa Anda dapat membuat migrasi dengan konversi data. Secara pribadi, saya suka meletakkan ini di file model saya, dan kemudian menghapusnya setelah semua skema database telah dimigrasi dan stabil.
sumber
Untuk melengkapi jawaban jika mengedit nilai default :
Di konsol rel Anda:
Dalam migrasi:
Akan terlihat seperti :
sumber