我想在rails表中添加一个新字段, 该字段不为空。 如何处理数据库中已准备就绪的条目?
答案 0 :(得分:0)
创建rake任务并将默认值分配给null列。您也可以在迁移中执行相同操作。
您必须为此添加迁移,因为迁移仅运行一次。但是rake任务可以多次运行。并且不必担心你是否运行rake任务。
您的迁移应该有:
def migrate(direction)
super
Xyz.where(:price_currency => nil).each do |xyz|
xyz.update(:price_currency => "USD") if direction == :up
end
def change
add_column :xyzs, :price_currency, :sting, default: "USD", null: false
end
答案 1 :(得分:0)
如果您创建迁移以添加新的非空列,并只是指定一个默认值,那么所有存在的记录将采用默认值
class AddNotNullColumn < ActiveRecord::Migration
def change
add_column :table_name, :column_name, :column_type, null: false, default: 'default_value'
end
end
这应该一次性完成所有这些