Saya punya masalah, bahwa saya memiliki migrasi di Rails yang menetapkan pengaturan default untuk kolom, seperti contoh ini:
def self.up
add_column :column_name, :bought_at, :datetime, :default => Time.now
end
Misalkan, saya ingin menghapus pengaturan default itu dalam migrasi nanti, bagaimana saya melakukannya dengan menggunakan migrasi rails?
Solusi saya saat ini adalah pelaksanaan perintah sql khusus dalam migrasi rails, seperti ini:
def self.up
execute 'alter table column_name alter bought_at drop default'
end
Tapi saya tidak suka pendekatan ini, karena saya sekarang tergantung pada bagaimana database yang mendasari menafsirkan perintah ini. Jika terjadi perubahan pada basis data, kueri ini mungkin tidak berfungsi lagi dan migrasi akan rusak. Jadi, apakah ada cara untuk mengekspresikan pembatalan pengaturan default untuk kolom di rails?
ruby-on-rails
rails-migrations
wulfovitch
sumber
sumber
CHARACTER VARYING
kolom, cukup aturNULL::character varying
.change_column_default(:table_name, :column_name, from: nil, to: false)
ALTER TABLE table_name ALTER COLUMN type DROP DEFAULT
, tidak perlu mengaturnyaNULL
menurut saya.Suara seperti Anda melakukan hal yang benar dengan Anda 'mengeksekusi', sebagai docs menunjukkan:
sumber
Cuplikan berikut ini saya gunakan untuk membuat
NULL
kolomNOT NULL
, tetapi lewatiDEFAULT
di tingkat skema:sumber
Rel 4
sumber