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迁移时的更改块。完全忘了把它拿走。