2016-06-09 60 views
0

说我有叫果这样的数据库表:Rails的迁移改变空字符串为空

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

我需要写一个迁移改变空字符串为空,而不在这种情况下,影响melon

这是关于这些行吗?

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

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

+2

为什么不只是做'update_all','Fruit.where(name:“”).update_all(name:nil) ' – lusketeer

+0

@lusketeer你的意思是在迁移中使用它? – Jax

+0

任何地方,轨道控制台,迁移,你并不需要迁移,但如果想保持一致,将其添加到迁移 – lusketeer

回答

0
Fruit.where(name: "").update_all(name: nil) 

轨控制台,迁移,随时随地可以EXCUTE它。你不需要迁移,但如果想保持一致,将它添加到迁移

0
在控制台的开发和生产,以及

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

谢谢,但我更喜欢迁移。 – Jax

0

使用通常的命令以产生一个迁移;

rails g migration xxxxx 

,然后添加:

def change 
    execute "UPDATE fruits SET name = NULL WHERE name = '' " 
end 
+0

你在sql中使用'name IS NULL' –

+0

@TheCha͢mp,这是行得通的,试试吧! – CodeMaker

+0

http://stackoverflow.com/a/9581790/2235594 –