Jak najlepiej „połączyć” dwa obiekty i ich skojarzenia w szynach?

Oto moja sytuacja: mam 2 osoby, osoby1 i osoby2, które zostały utworzone z dwóch różnych zewnętrznych źródeł danych. Mam proces ręczny, którego używam, który określił, że osoba1 i osoba2 rzeczywiście odnoszą się do tej samej osoby, więc chcę „połączyć” je w jedną osobę i usunąć duplikat.

Nie mam problemu z robieniem tego na podstawie pola po polu dla samego obiektu, ale rzeczą, która staje się trudna i będzie trudna do utrzymania, jeśli zrobię to źle, jest to, że ci ludzie mają skojarzenia (nie wszyscy). To co chcę zrobić, to skopiować odpowiednie pola do osoby1 (której użyję dalej), chcę też przenieść skojarzenia z osoby2 na osobę1.

Myślę, że moje pytanie sprowadza się do tego: Czy istnieje sposób na 1) iterowanie każdego skojarzenia dla obiektu, i 2) określenie pola foreign_key dla tego powiązania. Jestem pewien, że gdybym był w stanie zrobić te rzeczy, mógłbym napisać metodę, która automatycznie przenosiłaby każdy powiązany rekord z osoby2 na osobę1, a nie zmieniał tego kodu, jeśli dodam lub usunę skojarzenie.

Jakieś pomysły, jak to zrobić?

Dzięki.

Edycja: Zaimplementowałem (tak szybko i nieczysto, jak to tylko możliwe) kod oparty na wskazówkach podanych w odpowiedzi Duncana. Na wypadek, gdyby to komukolwiek pomogło, jest to ogólny zarys tego, jak można przenieść wszystkie powiązane obiekty z jednego obiektu (w tym przypadku @ p2) do innego (@ p1).

Person.reflect_on_all_associations.each do |assoc|
  if assoc.macro == :has_many
    @p2.send(assoc.name).each do |assoc_obj|
      assoc_obj.update_attribute(assoc.primary_key_name, @p1.id)
    end
  elsif assoc.macro == :has_one
    @p2.send(assoc.name).update_attribute(assoc.primary_key_name, @p1.id)
  end
end

questionAnswers(1)

yourAnswerToTheQuestion