Jawaban:
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.
change_column_default :employees, :foreign, false
from:
dan to:
jika Anda ingin menjadi reversibel :)
from
dan to
ditambahkan dalam Rails 5+ dalam komit ini: github.com/rails/rails/pull/20018/files
Untuk Rails 4+ , gunakanchange_column_default
def change
change_column_default :table, :column, value
end
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. Dan change_column
tidak bisa dibalik. Anda dapat naik tetapi Anda tidak bisa turun, karena change_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.
def up
change_column :users, :admin, :boolean, default: false
end
def down
change_column :users, :admin, :boolean, default: nil
end
Atau jika Anda ingin mengubah nilai default untuk kolom yang ada.
def up
change_column :users, :admin, :boolean, default: false
end
def down
change_column :users, :admin, :boolean, default: true
end
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.
$ rails generate migration add_columnname_to_tablename columnname:boolean
Perintah di atas akan menambahkan kolom baru di tabel Anda.
class AddColumnnameToTablename < ActiveRecord::Migration
def change
add_column :table_name, :column_name, :boolean, default: false
end
end
$ rake db:migrate
Menjalankan:
rails generate migration add_column_to_table column:boolean
Ini akan menghasilkan migrasi ini:
class AddColumnToTable < ActiveRecord::Migration
def change
add_column :table, :column, :boolean
end
end
Tetapkan nilai default menambahkan: default => 1
add_column: table,: column,: boolean,: default => 1
Lari:
rake db: bermigrasi
Key is not present in table error
.
Inilah yang dapat Anda lakukan:
class Profile < ActiveRecord::Base
before_save :set_default_val
def set_default_val
self.send_updates = 'val' unless self.send_updates
end
end
EDIT: ... tapi ini kesalahan Rookie!
before_save
up
blok dan bukan dichange
blok. Anda dapat membiarkandown
blok kosong. Itu tidak akan mengembalikan tabel ke kondisi semula tetapi migrasi dapat dibatalkan.