Grupowa zmiana ID w tabeli potomka

Cześć,

Przenoszę dane ze starego systemu i widzę, że jest bajzel z redundancją.
Muszę w aplikacji zrobić funkcję “scalania” polegającą na tym, że jeden z rekordów “rodzica” jest usuwany, gdyż dane są powielone
np.
Kowalski Jan, Warszawa, Krakowskie Przedmieście 48/50 (ID= 1001)
Kowalski Jan, Warszawa, Krakowskie Przedmieście 48/50 (ID= 1002)

“Scalenie” ma polegać na tym, że jeden z rekordów zostanie usunięty, a dokumenty z nim skojarzone zostaną przypisane do drugiego.

Czyli przykładowo

customer_a = Customer.find(1001)
customer_b = Customer.find(1002)

customer_a.documents ->

id=222222, name=“Document 1”, …, customer_id=1001
id=222223, name=“Document 2”, …, customer_id=1001
id=222224, name=“Document 3”, …, customer_id=1001

customer_b.documents ->

id=222226, name=“Document 11”, …, customer_id=1002
id=222227, name=“Document 12”, …, customer_id=1002

W efekcie końcowym ma być:

customer_a = Customer.find(1001) -> nil - usunięty rekord
customer_b = Customer.find(1002) -> Kowalski Jan, Warszawa, Krakowskie Przedmieście 48/50 (ID= 1002)

customer_b.documents ->

id=222222, name=“Document 1”, …, customer_id=1002
id=222223, name=“Document 2”, …, customer_id=1002
id=222224, name=“Document 3”, …, customer_id=1002
id=222226, name=“Document 11”, …, customer_id=1002
id=222227, name=“Document 12”, …, customer_id=1002

Moje pytanie jest następujące:
Czy istnieje jakaś bardziej wyrafinowana technika niż iteracja po rekordach i zmienianie “ręczne” customer_id ? :

customer_a.documents.each do |doc|
  doc.customer_id = customer_b.id
  doc.save!
end
customer.documents.update_all(customer_id: customer_b.id)

Super…!

Thx :slight_smile:

…ale rozumiem, że ma być:

customer_a.documents.update_all(customer_id: customer_b.id)

?

Tak.