2012-11-14 57 views
0

如何運行Sequel遷移,使用行中的值更新新添加的列?續集遷移更新與一行的ID

續集文檔顯示如何更新一個靜態值的列:

self[:artists].update(:location=>'Sacramento')

我需要做的就是更新與ID列的值的新列:

像這樣:

self[:artists].each |artist| do 
    artist.update(:location => artist[:id]) 
end 

但上述不起作用,我一直無法弄清楚如何去得到它。

謝謝!

回答

2

artist在循環是Hash,所以你在呼喚Hash#update,剛剛更新Hash情況下,它不會修改數據庫。這就是爲什麼你的循環似乎沒有做任何事情。

我可以解釋如何使循環的工作(使用all代替each和更新僅限於匹配的主鍵值的數據集),但因爲你只是分配一個列的值到另一列的值所有行,你可以這樣做:

self[:artists].update(:location=>:id) 
+0

太棒了,謝謝傑里米。沒有意識到我可以通過列名作爲符號。 –

0

,如果你需要更新一個表中的所有行,因爲它是一個新的列需要來填充

artists = DB[:artists] 
artists.update(:column_name => 'new value') 

,或者如果你需要,只有更新獨特的行進入你r遷移文件你可以:

artists = DB[:artists] 
artists.where(:id => 1).update(:column_name1 => 'new value1', :column_name2 => "other")