Yanıtlar:
Bunu nasıl yapmanız gerektiği aşağıda açıklanmıştır:
change_column :users, :admin, :boolean, :default => false
Ancak PostgreSQL gibi bazı veritabanları, daha önce oluşturulan satırların alanını güncellemeyeceğinden, alanı taşıma işleminde manuel olarak güncellediğinizden emin olun.
change_column_default :employees, :foreign, false
from:
ve to:
geri dönüşümlü olmasını istiyorsanız :)
İçin Raylar 4+ , kullanımchange_column_default
def change
change_column_default :table, :column, value
end
def change
`add_column: foos,: name, default:" mevcut değerler için bir şey "` `change_column_default: foos,: name, default:" "` `end
change_column_default :products, :approved, from: true, to: false
- ama çok da işe yaramıyor.
Kullanarak def change
geri döndürülebilir taşıma işlemleri yazmalısınız. Ve change_column
geri dönüşümlü değildir. Yukarı gidebilirsin ama aşağı change_column
inemezsin , çünkü geri döndürülemez.
O bir çift ekstra satırları olabilir ama bunun yerine, kullanmak gerekir def up
vedef down
Dolayısıyla, varsayılan değeri olmayan bir sütununuz varsa, bunu varsayılan bir değer eklemek için yapmanız gerekir.
def up
change_column :users, :admin, :boolean, default: false
end
def down
change_column :users, :admin, :boolean, default: nil
end
Veya varolan bir sütunun varsayılan değerini değiştirmek istiyorsanız.
def up
change_column :users, :admin, :boolean, default: false
end
def down
change_column :users, :admin, :boolean, default: true
end
Rails 4'ten itibaren, varsayılan değeri olan bir tabloya sütun eklemek için taşıma oluşturamazsınız, aşağıdaki adımlar varolan bir tabloya varsayılan değeri true veya false olan yeni bir sütun ekler.
$ rails generate migration add_columnname_to_tablename columnname:boolean
Yukarıdaki komut tablonuza yeni bir sütun ekleyecektir.
class AddColumnnameToTablename < ActiveRecord::Migration
def change
add_column :table_name, :column_name, :boolean, default: false
end
end
$ rake db:migrate
Yürütme:
rails generate migration add_column_to_table column:boolean
Şu taşıma işlemini oluşturacak:
class AddColumnToTable < ActiveRecord::Migration
def change
add_column :table, :column, :boolean
end
end
Varsayılan değer eklemeyi ayarlayın: default => 1
add_column: tablo,: sütun,: boolean,: varsayılan => 1
Çalıştırmak:
tırmık db: göç
Key is not present in table error
.
Yapabilecekleriniz:
class Profile < ActiveRecord::Base
before_save :set_default_val
def set_default_val
self.send_updates = 'val' unless self.send_updates
end
end
EDIT: ... ama görünüşe göre bu bir Çaylak hatası!
before_save
up
blok yerine bir bloğa koyunchange
.down
Bloğu boş bırakabilirsiniz . Tabloyu orijinal durumuna geri döndürmez, ancak taşıma geri alınabilir.