2016-06-09 28 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 –