Bagaimana cara menambahkan nilai default ke kolom yang sudah ada melalui migrasi?
Semua dokumentasi yang saya temukan menunjukkan kepada Anda cara melakukannya jika kolomnya belum ada tetapi dalam kasus ini memang ada.
Bagaimana cara menambahkan nilai default ke kolom yang sudah ada melalui migrasi?
Semua dokumentasi yang saya temukan menunjukkan kepada Anda cara melakukannya jika kolomnya belum ada tetapi dalam kasus ini memang ada.
Inilah cara Anda harus melakukannya:
change_column :users, :admin, :boolean, :default => false
Tetapi beberapa database, seperti PostgreSQL, tidak akan memperbarui bidang untuk baris yang sebelumnya dibuat, jadi pastikan Anda memperbarui bidang manaully pada migrasi juga.
up
blok dan bukan dichange
blok. Anda dapat membiarkandown
blok kosong. Itu tidak akan mengembalikan tabel ke kondisi semula tetapi migrasi dapat dibatalkan.sumber
from:
danto:
jika Anda ingin menjadi reversibel :)from
danto
ditambahkan dalam Rails 5+ dalam komit ini: github.com/rails/rails/pull/20018/filesUntuk Rails 4+ , gunakan
change_column_default
sumber
def change
`add_column: foos,: name, default:" sesuatu untuk nilai yang ada "` `change_column_default: foos,: name, default:" "`end
change_column_default :products, :approved, from: true, to: false
- tetapi tidak berfungsi juga.Menggunakan
def change
berarti Anda harus menulis migrasi yang dapat dibalik. Danchange_column
tidak bisa dibalik. Anda dapat naik tetapi Anda tidak bisa turun, karenachange_column
tidak dapat dipulihkan.Sebaliknya, meskipun mungkin beberapa baris tambahan, Anda harus menggunakan
def up
dandef down
Jadi jika Anda memiliki kolom tanpa nilai default, maka Anda harus melakukan ini untuk menambahkan nilai default.
Atau jika Anda ingin mengubah nilai default untuk kolom yang ada.
sumber
** Rails 4.X + **
Pada Rails 4 Anda tidak dapat menghasilkan migrasi untuk menambahkan kolom ke tabel dengan nilai default, Langkah-langkah berikut menambahkan kolom baru ke tabel yang ada dengan nilai default benar atau salah.
1. Jalankan migrasi dari baris perintah untuk menambahkan kolom baru
Perintah di atas akan menambahkan kolom baru di tabel Anda.
2. Tetapkan nilai kolom baru ke TRUE / FALSE dengan mengedit file migrasi baru yang dibuat.
** 3. Untuk membuat perubahan ke tabel database aplikasi Anda, jalankan perintah berikut di terminal **
sumber
Menjalankan:
Ini akan menghasilkan migrasi ini:
Tetapkan nilai default menambahkan: default => 1
Lari:
sumber
Key is not present in table error
.Inilah yang dapat Anda lakukan:
EDIT: ... tapi ini kesalahan Rookie!
sumber
before_save