Rails 迁移以将空字符串更改为 null

Rails migration to change empty strings to null

假设我有一个名为 fruit 的数据库 table 是这样的:

id  name
1   ““
2   “"
3   ““
4   ““
5   ""
6   melon

在这种情况下,我需要编写迁移以将空字符串更改为 null,而不影响 melon

会不会是这几行?

def change
  update_column fruits, :name, null if :name => ""
end

我猜是很基本的东西,但我有点卡在这里了。 这里最好的方法是什么?

在控制台开发和生产中也是如此:

Fruit.all.each do |fruit|
  if fruit.name == ""
    fruit.name = nil
    fruit.save
  end
end

使用普通命令生成迁移;

rails g migration xxxxx

然后添加:

def change
  execute "UPDATE fruits SET name = NULL WHERE name = '' "
end 
Fruit.where(name: "").update_all(name: nil)

rails 控制台,迁移,任何你可以执行它的地方。您实际上并不需要迁移,但如果想保持一致,请将其添加到迁移中