Обновление Sequel Migration с идентификатором строки

Как вы можете запустить миграцию Sequel, которая обновляет только что добавленный столбец значением из строки?

Документация Sequel показывает, как вы можете обновить столбец статическим значением:

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

Что мне нужно сделать, так это обновить новый столбец со значением столбца ID:

что-то типа:

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

Но вышеперечисленное не работает, и я не смог понять, как заставить его работать.

Спасибо!


person Greg Olsen    schedule 14.11.2012    source источник


Ответы (2)


artist в вашем цикле - это Hash, поэтому вы вызываете Hash#update, который просто обновляет экземпляр Hash, не изменяя базу данных. Вот почему ваш цикл ничего не делает.

Я мог бы объяснить, как заставить цикл работать (используя all вместо each и обновляя набор данных, ограниченный совпадающим значением первичного ключа), но поскольку вы просто присваиваете значение одного столбца значению другого столбца для всех строк, вы можно просто сделать:

self[:artists].update(:location=>:id)
person Jeremy Evans    schedule 14.11.2012
comment
Круто, спасибо, Джереми. Не понимал, что могу просто передать имя столбца как символ. - person Greg Olsen; 15.11.2012

если вам нужно обновить все строки таблицы, потому что это новый столбец, который необходимо заполнить

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

или, если вам нужно, обновите только уникальную строку в вашем файле миграции, вы можете:

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