【发布时间】:2021-07-24 20:31:04
【问题描述】:
我必须在现有表中添加 2 个新列,它们是 created_at、updated_at。但是,created_at 和 updated_at 字段不应为空,除非我的数据库中有几条现有记录,因此简单的 change 迁移不起作用。我决定进行向上/向下迁移,因为我需要先更新这些记录,然后再将这些字段设置为 not null。
我的迁移文件如下所示:
Class AddColumnsToCharge < ActiveRecord::Migration[6.0]
def up
add_column :charges, :created_at, :datetime
add_column :charges, :updated_at, :datetime
Charge.update_all(created_at: Time.now, updated_at: Time.now)
end
def down
change_column :charges, :created_at, :datetime, null:false
change_column :charges, :updated_at, :datetime, null:false
end
end
现在这似乎有效,因为我不再收到抱怨现有列的错误,其中 created_at/updated_at 字段为空值。但是我的 schema.rb 并没有将这些字段显示为null: false,而是我看到了
create_table "charges", force: :cascade do |t|
t.bigint 'amount'
t.datetime 'created_at'
t.datetime 'updated_at'
我期望看到的是:
create_table "charges", force: :cascade do |t|
t.bigint 'amount'
t.datetime 'created_at', null: false
t.datetime 'updated_at', null: false
是我的 down 没有被执行还是我在迁移文件中做错了什么?(提前感谢您的帮助)
【问题讨论】:
标签: ruby-on-rails rails-migrations