Ruby on rails ActiveRecord更改列默认值(不工作)

Ruby on rails ActiveRecord更改列默认值(不工作),ruby-on-rails,activerecord,rails-migrations,Ruby On Rails,Activerecord,Rails Migrations,我的数据库中有一个companys表,其中有两列(size和state),我希望向其中添加默认值。当前没有默认值,列未设置为null:false。我尝试过使用中概述的update\u列和update\u列方法,但这两种方法似乎都不起作用。我可以运行迁移,但表没有更改 我试过像这样更新专栏: class AddDefaultValuesToCompanies < ActiveRecord::Migration def change def up

我的数据库中有一个
companys
表,其中有两列(
size
state
),我希望向其中添加默认值。当前没有默认值,列未设置为
null:false
。我尝试过使用中概述的
update\u列
update\u列
方法,但这两种方法似乎都不起作用。我可以运行迁移,但表没有更改

我试过像这样更新专栏:

class AddDefaultValuesToCompanies < ActiveRecord::Migration
    def change
        def up
            change_column :companies, :state, :string, default: 'MA'
            change_column :companies, :size, :string, default: '1-10'
        end

        def down
            change_column :companies, :state, :string, default: nil
            change_column :companies, :size, :string, default: nil
        end
    end
end
class AddDefaultValuesToCompanies < ActiveRecord::Migration
    def change
        def up
            change_column_default(:companies, :state, 'MA')
            change_column_default(:companies, :size, '1-10')
        end

        def down
            change_column_default(:companies, :state, nil)
            change_column_default(:companies, :size, nil)
        end
    end
end

这里缺少什么?

您的迁移只会更改新创建记录的默认值。我将编写一个rake任务来更新数据库中的现有值。使用类似

Companies.where(state: "").map{|c| c.update_attribute(state: "ma")

迁移只会更改新创建记录的默认值。我将编写一个rake任务来更新数据库中的现有值。使用类似

Companies.where(state: "").map{|c| c.update_attribute(state: "ma")

您进行的迁移将更改列默认值,但不会更新现有数据…我认为从语法上讲,将
change
块包装在
down
up
块周围是不合适的。我不知道这是否对你的问题负有部分责任。运行rake db:migrate时输出的是什么?哇,真不敢相信我错过了。这是我运行
railsg迁移时的更改块。完全忘了删除它。您进行的迁移将更改列默认值,但不会更新现有数据…我认为从语法上来说,将
更改
块包装在
向下
向上
块周围是不合适的。我不知道这是否对你的问题负有部分责任。运行rake db:migrate时输出的是什么?哇,真不敢相信我错过了。这是我运行
railsg迁移时的更改块。完全忘了把它拿走。