Saya telah melihat beberapa pertanyaan (yaitu yang ini ) di sini di SO tentang menambahkan nilai boolean default ke kolom yang ada. Jadi saya mencoba change_column
saran tetapi saya tidak boleh melakukannya dengan benar.
Saya mencoba:
$ change_column :profiles, :show_attribute, :boolean, :default => true
Yang kembali -bash: change_column: command not found
Saya kemudian berlari:
$ rails g change_column :profiles, :show_attribute, :boolean, :default => true
...dan
$ rails change_column :profiles, :show_attribute, :boolean, :default => true
Kemudian berlari rake db:migrate
, tetapi nilai untuk :show_attribute
tetap nil
. Dalam pertanyaan yang saya referensikan di atas tertulis di PostgreSQL Anda perlu memperbaruinya secara manual. Karena saya menggunakan PostgreSQL, saya menambahkan yang berikut ini dalam create_profiles
migrasi saya :
t.boolean :show_attribute, :default => true
Bisakah seseorang memberi tahu saya apa yang saya lakukan salah di sini?
sumber
up
metode dalam migrasi, yang merupakan kelas baru yang akan dihasilkan dalam db / migrasi /. (down
Metode harus ditulis untuk membatalkan apa yangup
dilakukan.) Buat perubahan itu, lalurake db:migrate
.def self.up
dandef self.down
show
atau apa pun nama kolomnya.Sebagai variasi pada jawaban yang diterima, Anda juga dapat menggunakan
change_column_default
metode ini dalam migrasi Anda:Rails API-docs
sumber
show
atau apa pun nama kolomnya.show_attribute
adalah nama kolom, saya tidak berpikir rel 5 ada hubungannya dengan itu, kan?Saya tidak yakin kapan ini ditulis, tetapi saat ini untuk menambah atau menghapus default dari kolom dalam migrasi, Anda dapat menggunakan yang berikut ini:
Rel 5:
http://edgeguides.rubyonrails.org/active_record_migrations.html#changing-columns
Rails 4.2:
http://guides.rubyonrails.org/v4.2/active_record_migrations.html#changing-columns
Yang merupakan cara yang rapi untuk menghindari melihat melalui migrasi atau skema Anda untuk spesifikasi kolom.
sumber
null: false
dandefault: :something
pada dasarnyaJuga, sesuai dokumen:
https://guides.rubyonrails.org/active_record_migrations.html
Jadi tidak ada generator rel siap pakai. Seperti yang ditentukan oleh jawaban di atas, Anda harus mengisi file migrasi Anda secara manual dengan
change_column_default
metode ini.Anda dapat membuat generator sendiri: https://guides.rubyonrails.org/generators.html
sumber
Jika Anda baru saja melakukan migrasi, Anda dapat mengembalikan dan kemudian melakukan migrasi lagi.
Untuk mengembalikan, Anda dapat melakukan langkah sebanyak yang Anda inginkan:
Atau, jika Anda menggunakan Rails 5.2 atau yang lebih baru:
Kemudian, Anda bisa melakukan migrasi lagi:
Jangan lupa
rake db:migrate
dan jika Anda menggunakan herokuheroku run rake db:migrate
sumber
Tampaknya merupakan cara terbaik untuk menambahkan default ke kolom yang sudah ada yang tidak memiliki
null: false
.Jika tidak:
Beberapa penelitian yang saya lakukan tentang ini:
https://gist.github.com/Dorian/417b9a0e1a4e09a558c39345d50c8c3b
sumber
Jika Anda tidak ingin membuat file migrasi lain untuk perubahan kecil dan terbaru - dari Rails Console:
Kemudian keluar dan masukkan kembali konsol konsol, sehingga DB-Changes akan berlaku. Lalu, jika Anda melakukan ini ...
Anda harus melihat nilai default "show_attribute" sebagai benar.
Untuk catatan yang ada, jika Anda ingin mempertahankan pengaturan "false" yang ada dan hanya memperbarui nilai "nil" ke default baru Anda:
Perbarui migrasi yang membuat tabel ini, sehingga build DB apa pun di masa mendatang akan memperbaikinya sejak awal. Jalankan juga proses yang sama pada instance DB yang digunakan.
Jika menggunakan metode "migrasi db baru", Anda dapat melakukan pembaruan dari nilai-nil yang ada dalam migrasi itu.
sumber