продуктов (например, iPod Classic): has_many =>: списки,: зависимые =>: уничтожить
списки (например, «Меня зовут Джо, и у меня есть iPod для продажи): own_to =>: product
Итак, если я удаляю данный продукт, все списки, которые на него ссылаются, удаляются. Это имеет смысл, и это умышленно.
Однако я пишу "объединение"«функции, где вы объединяете два продукта в один и объединяете их списки. Итак, скажем, мои два продукта -« iPod Color »и« iPod Classic », и я хочу объединить два. Я хочу сказать,«iPod Color, объединитесь с iPod Classic», и результат должен быть следующим:
- Все списки цветов iPod перенаправлены на продукт iPod Classic
- После изменения product_id,Списки сохранены
- Затем я удаляю продукт "iPod Color"
Хорошо, все должно работать нормально, без удаления каких-либо списков. Однако у меня естьэтот контроллер, и по какой-либо причине, когда я уничтожаю «iPod Color»Продукт, даже после подтверждения того, что листинги были перемещены в «iPod Classic» и сохранены в базе данных, листинги, которые ранее были указаны как «iPod Color», также уничтожаются, и я не могу понять, почему.Как будто они сохраняют какую-то связь с уничтоженным продуктом и, следовательно, начинают уничтожать себя.
Какая болезненно очевидная вещь, которую я упускаю?
def merge
merging_from = Product.find(params[:id])
merging_to = Product.find_by_model(params[:merging_to])
unless merging_to.nil?
unless merging_from.nil?
unless merging_from == merging_to # you don't want to merge something with itself
merging_from.listings.each do |l|
l.product = merging_to
l.save
end
# through some debugging, I've confirmed that my missing Listings are disappearing as a result of the following destroy call
merging_from.destroy
end
end
end