Перенос данных из отношения «один ко многим» в отношение HABTM

Я новичок в рельсах и работаю над обновлением простого приложения для рельсов. В настоящее время между :categories и :galleries существует отношение один ко многим. Я изменил обе модели на отношение HABTM и создал миграцию таблицы соединений.

Есть ли способ настроить миграцию так, чтобы Gallery_id, ранее сохраненные в таблице категорий, можно было переместить в таблицу соединений?


person juliaallyce    schedule 10.12.2012    source источник


Ответы (1)


Вы можете сделать что-то подобное в своей восходящей миграции.

Category.all.each do |cat|
 gallery = Gallery.find(cat.gallery_id)
 cat.galleries << gallery
 cat.save
end

Вы хотели бы разрушить ассоциацию и добавить галерею_id обратно в миграцию вниз.

person cih    schedule 10.12.2012
comment
В любом случае вы могли бы объяснить, что именно это делает (извините, я новичок в рубине и рельсах) - person juliaallyce; 11.12.2012
comment
Конечно, это перебирает каждую из категорий. Затем он найдет галерею из Gallery_id, связанную с каждой категорией (это использовалось для ваших отношений «один ко многим»). Затем он добавит галерею в массив галерей. Rails создаст необходимый SQL для ассоциации habtm за кулисами. Возможно, вы захотите обработать, если в некоторых случаях Gallery_id равен нулю, просто не обновляйте массив в этом случае. - person cih; 11.12.2012
comment
добавил условие, чтобы проверить, был ли идентификатор пустым, и все отлично сработало. Спасибо!! - person juliaallyce; 11.12.2012